java访问类在线程中的变量并使用外部线程

时间:2013-02-18 18:15:43

标签: java eclipse swing netbeans thread-safety

我有一个名为NewFrame.java的GUI类,另一个是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类中有一个名为setTextboxValue的setter方法,但如上所示调用它会出现错误“java.lang.NullPointerException”。

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

1 个答案:

答案 0 :(得分:2)

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