1

我正在尝试访问 main() 中的 jTextArea,但收到一条错误消息,指出"Non-static members cannot be accessed in static context". 因此我通过以下方式访问:(使用netbeans)

public static void main(String args[]) throws Exception {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
           new UserInterface().setVisible(true);
        }
    });

    sample ss=new sample();
    System.out.println("Inside Main()");
    ss.display("Happy");
}

class sample 
{
    void display(String message)
    {

        UserInterface ui=new UserInterface();
        System.out.println("inside sample:"+message);
        ui.jTextArea2.append(message);
        String aa=ui.jTextArea2.getText();
        System.out.println("Content of JTextArea2:"+aa);
    }
}

我已将变量声明为:public javax.swing.JTextArea jTextArea2;

我得到以下输出:

Main() 内部

内样:Happy

JTextArea2 的内容:Happy

但问题是:该消息未显示在 GUI 的 jTextArea2 中。

4

1 回答 1

2

您已经创建了两个不同的引用UserInterface...

java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
       // Here's one...
       new UserInterface().setVisible(true);
    }
});

//...

void display(String message)
{
    // And here's another
    UserInterface ui=new UserInterface();

现在这两个引用彼此无关,对其中一个的任何修改都不会影响另一个。

如果你没有这样的事情:

public static void main(String args[]) throws Exception {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            UserInterface ui = new UserInterface();
            ui.jTextArea2.append(message);
            ui.setVisible(true)
        }
    });
}

你应该会发现它有效。

更新

一直在加载类,public static void main(String[] agrs)否则很难完成任何事情;)

public class UserInterface extends javax.swing.JFrame { 
    public static void main(String args[]) throws Exception {
        java.awt.EventQueue.invokeLater(new Runnable() { 
            public void run() {
                UserInterface ui = new UserInterface();
                // Happy interactions :D
            } 
        }); 
    }
}
于 2012-10-01T05:02:33.020 回答