-1

我有一个名为 as 的 GUI 类NewFrame.java,另一个是Client.java. 在 Client.java 中,NewFrame 的对象是在一个线程中创建的。前任,

public class ClientA {

NewJFrame gui;
int x ;

public void go() {
            java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                gui  = new NewJFrame();
                gui.setVisible(true);
                x = 10;
            }
        });

        System.out.println(x); // does not print 10 but it prints 0

        gui.setTextboxvalue("value changed !!!"); 

        // can'se pass value to the function, with this error occurs as,
        // "java.lang.NullPointerException" at here.

      }
}

这里出现了两个问题,在 NewFrame 类中有一个 setter 方法,setTextboxValue但如上所示调用它会发生错误“java.lang.NullPointerException”。

另一个问题是:为什么我不能x在该线程内设置变量,在线程内设置此变量,外部打印变量x的值 10 不是在那里打印而是打印0

4

1 回答 1

2

EventQueue.invokeLater在一个单独的线程上调用它的方法,在事件调度线程上的所有其他任务完成后,该线程在事件调度线程上异步触发。换句话说,run() 方法中的代码很可能会在您的方法完成后执行。因此,该gui变量仍将为 null,导致NullPointerException调用gui.setTextboxvalue; 当您打印出该值时,x 仍将为 0。

于 2013-02-18T18:21:37.253 回答