我在更新JApplet中的JLabel时遇到了问题。我正在使用SwingUtils.invokeLater但是当Applet在浏览器中时它不起作用。当我在NetBeans Applet Viewer上测试它时工作正常,但现在在浏览器中。它仅在我第一次调用sendMessage("Starting test 1");
时更新,但其他调用sendMessage
时不会更新GUI Applet。有什么提示吗?
这是执行一些计算的classe:
public abstract class ConDiagnoseTool implements Runnable{
@Override
public void run(){
String result = "";
try {
sendMessage("Starting test 1");
result += execute();
result += execute();
sendMessage("Starting test 2");
result += execute();
sendMessage("Starting test 3");
result += execute();
} catch (IOException e) {
result += e.toString();
}
sendResult(result);
sendMessage("Test finished.");
}
[...]
[...]
abstract void sendMessage(final String message);
abstract void sendResult(final String result);
}
在这里,我实现抽象方法,然后调用GUI线程:
private void btnStartActionPerformed(java.awt.event.ActionEvent evt) {
new Thread(new ConDiagnoseTool() {
@Override
void sendMessage(final String message) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
jStatus.setText(message);
}
});
}
@Override
void sendResult(final String result) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
jResult.setText(result);
}
});
}
}).start();
btnStart.setEnabled(false);
}
感谢阅读!
答案 0 :(得分:2)
所有应在event dispatch thread上构建和操作仅的所有 Swing GUI对象。这适用于应用程序,小程序和hybrids。此example使用SwingWorker
而不是Runnable
。