我已经制作了自己的状态栏。使用statusbareditor,我可以在栏上设置一些消息,并在10秒后消失。因为我的GUI可能没有被阻止,所以这个statusbareditor在第二个线程上工作。这很好用。但在编辑状态栏后,我在表单上设置了一个新面板。这个新面板仅在10秒后出现。这很奇怪,因为statusbareditor在不同的线程上工作。
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-class:
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("");
}
}
}
谢谢!
答案 0 :(得分:0)
我只能想象那里出了什么问题:
asideform = new Asideform();
asideform.AddFollower(this);
this.add(asideform, BorderLayout.WEST);
此部件是否更新了您的UI?如果是,您必须考虑到您的线程很可能无法满足您的需求。只要没有其他定义,处理时间就近似随机分配。
修改强>
还有一件事:
private JLabel statusbar;
这不属于您的UI类吗?
答案 1 :(得分:0)
没有看到“AsideForm”类很难说,但我的猜测是这是一个竞争条件。 也许您需要在启动线程之前准备您的asideForm对象,以便事件按预期顺序进行。