我在应用程序中使用了一些菜单项,并且我对覆盖的run方法有疑问。
private MenuItem menuItemUpdate = new MenuItem("Update", 0, 0) {
public void run() {
// Can I write GUI code here?
}
};
正如注释所说,我可以在这里编写GUI代码吗?我不能,对吧?既然我不在GUI线程上?当我有更改GUI的代码时,我应该使用invokeLater方法吗?那么Dialogs呢?是否也应该在invokeLater方法中调用它们?
如果我制作了另一个线程,当用户选择菜单项时,该线程将被调用,那么是否有必要覆盖MenuItem的run方法?我可以在构造函数中启动那个线程吗?并保持run方法未被覆盖?
您可以在那里编写UI代码,因为UI线程处理用户的操作,并调用菜单项代码。所有用户交互都由UI线程处理。
是的,你可以-因为它在UI线程上,例如:
private MenuItem menuItemUpdate = new MenuItem("Update", 0, 0) {
public void run() {
Show.status("Huzzah!");
}
};
这似乎是一个普遍的规则,你不添加任何锁定-直到你得到一个IllegalStateException;-)