我有一个名为 GUI 的类,它基本上使用 Swing 创建一个 latout。在该类中,我有一个名为“log”的方法,该方法应该向布局中的文本区域添加新行。
问题是每当我从 GUI 类外部调用该函数时,什么也没有发生。如果我从类中调用该方法,它会按照预期的方式向文本区域添加一行。
我已将方法及其调用的所有变量设置为公共(public)静态,并且没有收到任何错误。当我从外部调用该方法时,它只是不执行任何操作。
有什么想法吗?
编辑:
这是 GUI 类中的方法:
public static void log(String inputString) {
logConsole.append(inputString + "\r\n");
}
在类 swing 的底部声明了文本区域,我只是将其修改为公共(public)静态而不是私有(private)。
public static javax.swing.JTextArea logConsole;
无法发布更多代码,希望这至少有一点帮助吗? :/
最佳答案
这很可能是 Swing 的并发问题。由于 Swing 是单线程的,因此需要在事件调度线程(即 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
}
关于Java:调用静态方法但没有任何反应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7322346/