这是一个计算器的程序 用swing写的框架  MainFrame.java
(代码太长 截取关键的)
...
public MainFrame(Control ct)
{
this.ct = ct;
getFrame();
}
...//其中一个按钮的代码,其他按钮代码类似
private JButton getBackSpaceButton()
{
if (BackSpaceButton == null)
{
BackSpaceButton = new JButton();
BackSpaceButton.setBounds(new Rectangle(22, 102, 112, 43));
BackSpaceButton.setText("BackSpace");
BackSpaceButton.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
// System.out.println(ct.s.empty());
if(!ct.s.empty())
System.out.println(ct.s.pop());
}

});
}
return BackSpaceButton;
}
Control.java
//这个类用来控制整个计算器,其中有一个栈
import java.util.Stack;public class Control
{ public Stack<Object> s = null;

public static void main(String ag[])
{
Control ct = new Control();
ct.programStart();
}

public void programStart()
{
s = new Stack<Object>();
new MainFrame(this);
s.empty();

//这里 如果将new MainFrame(this)给不要的话 s.empty()不报NullPOINT错
//否则报错NULLPOINT;
//而且按BackSpace按钮也报错NULLPOINT
}
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【zhao9302】截止到2008-07-10 00:31:36的历史汇总数据(不包括此帖):
    发帖的总数量:2                        发帖的总分数:30                       每贴平均分数:15                       
    回帖的总数量:1                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:2                        结贴的总分数:30                       
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    new MainFrame(this);
    this把当前的Control作为参数传了进去。我怀疑你getFrame里面对Control的成员s做了修改导致的问题。
      

  3.   

    没有修改哦。。new MainFrame(this);就是为了传进去
    这是getFrame()
    private Frame getFrame()
    {
    if (Frame == null)
    {
    ShowLabel = new Label();
    ShowLabel.setBounds(new Rectangle(29, 47, 354, 44));
    ShowLabel.setText("");
    ShowLabel.setAlignment(Label.RIGHT);

    Frame = new Frame();
    Frame.setLayout(null);
    Frame.setSize(new Dimension(406, 409));
    Frame.setTitle("计算器");
    Frame.add(getBackSpaceButton(), null);
    Frame.add(getMCButton(), null);
    Frame.add(getMRButton(), null);
    Frame.add(getMSButton(), null);
    Frame.add(getMPlusButton(), null);
    Frame.add(getOneButton(), null);
    Frame.add(getTwoButton(), null);
    Frame.add(getThreeButton(), null);
    Frame.add(getFourButton(), null);
    Frame.add(getFiveButton(), null);
    Frame.add(getSixButton(), null);
    Frame.add(getSevenButton(), null);
    Frame.add(getEightButton(), null);
    Frame.add(getNineButton(), null);
    Frame.add(getZeroButton(), null);
    Frame.add(getSignButton(), null);
    Frame.add(getDotButton(), null);
    Frame.add(getPlusButton(), null);
    Frame.add(getMinusButton(), null);
    Frame.add(getMultiplyButton(), null);
    Frame.add(getDivideButton(), null);
    Frame.add(getSqrtButton(), null);
    Frame.add(getPercentButton(), null);
    Frame.add(getReciproalButton(), null);
    Frame.add(getEqualButton(), null);
    Frame.add(getCEButton(), null);
    Frame.add(getCButton(), null);
    // Frame.add(getShowTextField(), null);
    Frame.add(ShowLabel, null);

    Frame.setVisible(true);
    Frame.setResizable(false);
    Frame.setLocation(450, 150);
    Frame.addWindowListener(new WindowAdapter()
    {
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }

    });

    }
    return Frame;
    }
      

  4.   

    在getFrame();
    后面输出一下ct.s的信息。
      

  5.   

     if(!ct.s.empty())
                            System.out.println(ct.s.pop());
    这句是不是要判断s是否为空?
    注意区别s.empty()
    和s.isEmpty()
      

  6.   

    getFrame() 
    private Frame getFrame() 

    if (Frame == null) 

    ShowLabel = new Label(); 
    ShowLabel.setBounds(new Rectangle(29, 47, 354, 44)); 
    ShowLabel.setText(""); 
    ShowLabel.setAlignment(Label.RIGHT); 
      

  7.   

    检查了一下,还是没有发现有什么错误啊。按钮如果不按的话是不会调用里面的方法的。貌似错误也就错在getFrame()里面 。。但程序中根本就没用过ct.s
      

  8.   

    public MainFrame(Control ct)
    {
    System.out.println(ct.s);
    this.ct = ct;
    System.out.println(ct.s);
    getFrame();
    System.out.println(ct.s);
    }
    我这样改了
     输出结果是:
    []
    []
    null
    Exception in thread "main" java.lang.NullPointerException
    at Control.programStart(Control.java:18)
    at Control.main(Control.java:11)如果我再按一个按钮BackSpace的话
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at MainFrame$2.actionPerformed(MainFrame.java:147)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6038)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5803)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4410)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2429)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
      

  9.   

    at Control.programStart(Control.java:18) 
    看看这是哪句
      

  10.   

    import java.util.Stack;public class Control
    {    public Stack<Object> s = null;
        
        public static void main(String ag[])
        {
            Control ct = new Control();
            ct.programStart();
        }
        
        public void programStart()
        {        
            s = new Stack<Object>();
            new MainFrame(this);
            s.empty();  //是这句话 只是作为测试的时候加上的 其实这里如果我用的是 s.pop()或者s.push(1)之类的也是报错 同样的错误也就是说只要我 运行了new MainFrame(this)这句话就是这个样子。如果我不用这句话,我后面的是可以正常不报错的
    }}
      

  11.   

    public MainFrame(Control ct)
    {
    System.out.println(ct.s);
    this.ct = ct;
    System.out.println(ct.s);
    getFrame();
    System.out.println(ct.s);
    }
    我这样改了
    输出结果是:
    []
    []
    null
    getFrame()之后s就为null了.
      

  12.   

    恩恩 是啊。。我郁闷 但是getFrame()的程序我也贴出来了 没发现有什么问题啊
      

  13.   

    我知道了,我在后面有个地方没写 addActionListener 所以导致执行了那句话  还是谢谢哈