Java:调用静态方法但没有任何反应?

时间:2011-09-06 15:28:27

标签: java swing methods static

我有一个名为GUI的类,它基本上使用Swing创建一个latout。在那个类中,我有一个名为“log”的方法,它应该在布局中为textarea添加一个新行。

问题在于,每当我从GUI类外部调用该函数时,都不会发生任何事情。如果我从类中调用该方法,它会向textarea添加一行,因为它应该这样做。

我已将方法及其调用的所有变量设置为public static,并且我没有收到任何错误。当我从外面调用这个方法时,它什么也没做。

有什么想法吗?

编辑:

这是GUI类中的方法:

public static void log(String inputString) {
    logConsole.append(inputString + "\r\n");
}

在类的底部,swing声明了textarea,我只是将它修改为public static而不是private。

public static javax.swing.JTextArea logConsole;

无法发布更多代码,希望这至少有点帮助吗? :/

1 个答案:

答案 0 :(得分:8)

这很可能是Swing的并发问题。由于Swing是单线程的,因此需要在Event Dispatch Thread(即EDT)中修改Swing组件。有关详细信息,请参阅Concurrency in Swing


编辑 -

如果这确实是一个并发问题,那么一个快速的解决方法是使用SwingUtilities。特别是isEventDispatchThread()invokeLater(...)。例如,

if(!SwingUtilities.isEventDispatchThread()){
    SwingUtilities.invokeLater(new Runnable(){
        @Override
        public void run(){
            GUI.log("foo"); // modify textarea in EDT
        }
    });
}
else{
    // your problem lies elsewhere
}