java错误:主线程等待第二个线程执行
我制作了自己的状态栏。使用statusbareditor,我可以在工具栏上设置一些消息,10秒后它就会消失。因为我的GUI可能未被阻止,所以此StatusBarEdit在第二个线程上工作。这个很好用。但是在编辑状态栏之后,我在表单上设置了一个新面板。此新面板仅在10秒后出现。这很奇怪,因为StatusBarEdit在不同的线程上工作java错误:主线程等待第二个线程执行,java,multithreading,Java,Multithreading,我制作了自己的状态栏。使用statusbareditor,我可以在工具栏上设置一些消息,10秒后它就会消失。因为我的GUI可能未被阻止,所以此StatusBarEdit在第二个线程上工作。这个很好用。但是在编辑状态栏之后,我在表单上设置了一个新面板。此新面板仅在10秒后出现。这很奇怪,因为StatusBarEdit在不同的线程上工作 public void HandleLoggedIn(Person account) { StatusbarEditor reportThread = ne
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()…”的执行会一直等到线程完成,而它不应该这样做。您是否用调试器检查过这一点?我打赌这不只是“等等”谢谢。事实上,当我没有将标签作为参数传递时,执行工作正常,状态栏没有改变。现在我开始线程后,改变了面板,它的工作很好。太好了,它现在的工作!我想你可以把这个问题标记为现在已回答:)