Java:调用静态方法但什么都没发生?

Java:调用静态方法但什么都没发生?,java,swing,methods,static,Java,Swing,Methods,Static,我有一个名为GUI的类,它基本上使用Swing创建一个latout。在这个类中,我有一个名为“log”的方法,它应该在布局中的textarea中添加一个新行 问题是,每当我从GUI类外部调用函数时,都不会发生任何事情。如果我从类中调用该方法,它会像预期的那样向textarea添加一行 我已经将该方法及其调用的所有变量设置为publicstatic,并且没有得到任何错误。当我从外部调用该方法时,它没有任何作用 有什么想法吗 编辑: 以下是GUI类中的方法: public static void l

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

问题是,每当我从GUI类外部调用函数时,都不会发生任何事情。如果我从类中调用该方法,它会像预期的那样向textarea添加一行

我已经将该方法及其调用的所有变量设置为publicstatic,并且没有得到任何错误。当我从外部调用该方法时,它没有任何作用

有什么想法吗

编辑:

以下是GUI类中的方法:

public static void log(String inputString) {
    logConsole.append(inputString + "\r\n");
}
在类的底部,swing声明了textarea,我只是将其修改为public static而不是private

public static javax.swing.JTextArea logConsole;

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

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


编辑-

如果这确实是一个并发问题,那么一个快速的解决方法就是使用。特别是。比如说,

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

我把水晶球忘在家里了。如果不贴上相关代码,很难回答。但是您可以尝试通过编写class从外部类调用该方法。method()我的车不起作用。怎么了?伙计们,放松点…天啊@qwerty,为了更快地获得更好的帮助,请包含一个我仍然没有看到足够的代码来解释您的问题。如果mre在下面的回答中的出色建议无助于我支持SSCCE的建议。顺便说一句,关于“提供代码”,我们不希望看到整个程序,只希望看到一个小的可编译的程序修订,重现您的问题。查看上面mre评论中的链接,了解这涉及到的细节。如果你能制作并发布一个好的答案,你通常会很快得到一个好答案。由您决定。进一步解释:将在
logConsole
中追加一行。问题是这个变量在cpu上每个核心的缓存上都有副本。您正在主线程(一个核心)上写入一份
logConsole
,但不幸的是,屏幕上显示的副本是Swing EDT(另一个核心)中包含的副本。是的,我似乎无法让它工作,我阅读了mre发布的文档,但我不太理解它。有没有一个简单的方法让它工作?我发现我已经有了那个代码,除了我的代码没有@Override行,所以我添加了它。我的也没有if状态包装它,但当我尝试添加它时,会出现“非法开始类型”错误。。。(我已经导入了SwingUtilities库)但我不确定这是否是错误,因为它现在应该可以工作了?@qwerty,您收到的错误解释让我有点困惑,因为我提供的代码片段没有产生这样的错误。我当然认为您遇到了线程问题,我提供的代码片段应该可以解决这个问题。如果没有,那么正如我的评论所说,你的问题就在别处。完整的错误在这里:。我还认为这是一个线程相关的问题,因为我以前遇到过一些问题,但不是这样的。这很奇怪,因为它没有给我任何关于它的错误,它只是忽略了方法调用,有点像。