Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java错误:主线程等待第二个线程执行_Java_Multithreading - Fatal编程技术网

java错误:主线程等待第二个线程执行

java错误:主线程等待第二个线程执行,java,multithreading,Java,Multithreading,我制作了自己的状态栏。使用statusbareditor,我可以在工具栏上设置一些消息,10秒后它就会消失。因为我的GUI可能未被阻止,所以此StatusBarEdit在第二个线程上工作。这个很好用。但是在编辑状态栏之后,我在表单上设置了一个新面板。此新面板仅在10秒后出现。这很奇怪,因为StatusBarEdit在不同的线程上工作 public void HandleLoggedIn(Person account) { StatusbarEditor reportThread = ne

我制作了自己的状态栏。使用statusbareditor,我可以在工具栏上设置一些消息,10秒后它就会消失。因为我的GUI可能未被阻止,所以此StatusBarEdit在第二个线程上工作。这个很好用。但是在编辑状态栏之后,我在表单上设置了一个新面板。此新面板仅在10秒后出现。这很奇怪,因为StatusBarEdit在不同的线程上工作

public void HandleLoggedIn(Person account) {
    StatusbarEditor reportThread = new StatusbarEditor(labelStatusbar, "Aangemeld als " 
            + account.toString() + ".");
    reportThread.start();
    asideform = new Asideform();
    asideform.AddFollower(this);
    this.add(asideform, BorderLayout.WEST);
}
以及statusbareditor类:

public class StatusbarEditor extends Thread{

    private JLabel statusbar;
    private String text;

    public StatusbarEditor(JLabel statusbarlabel, String report){
        statusbar = statusbarlabel;
        text = report;
    }

    @Override
    public void run() {
        statusbar.setText(text);
        try { 
            Thread.sleep(10000);
        }  catch (InterruptedException ex) {
            Logger.getLogger(StatusbarEditor.class.getName()).log(Level.SEVERE, null, ex);
        }
        if(statusbar.getText().equals(text)){
            statusbar.setText("");
        }
    }
}

谢谢

我只能想象那里出了什么问题:

asideform = new Asideform();
asideform.AddFollower(this);
this.add(asideform, BorderLayout.WEST);
这部分正在更新您的UI吗?如果是,您必须考虑到您的线程很可能没有达到您需要的程度。只要不定义任何其他内容,处理时间就近似随机分布

编辑

还有一件事:

 private JLabel statusbar;
这不属于您的UI类吗?

如果没有看到“AsideForm”类,很难说,但我猜这是一个竞争条件。
在启动线程之前,您可能需要准备asideForm对象,以便事件按预期顺序发生。

当我第一次打开asideForm,然后启动线程时,一切正常。但我觉得奇怪的是,“asideform=new asideform()…”的执行会一直等到线程完成,而它不应该这样做。您是否用调试器检查过这一点?我打赌这不只是“等等”谢谢。事实上,当我没有将标签作为参数传递时,执行工作正常,状态栏没有改变。现在我开始线程后,改变了面板,它的工作很好。太好了,它现在的工作!我想你可以把这个问题标记为现在已回答:)