我在更新 JApplet 中的 JLabel 时遇到问题。我正在使用 SwingUtils.invokeLater 但是当 Applet 在浏览器中时它不起作用。当我在 NetBeans Applet Viewer 上测试它时,它工作正常,但现在在浏览器中。它仅在我第一次调用时更新,sendMessage("Starting test 1");
但其他调用sendMessage
不会更新 GUI Applet。有小费吗?
这是执行一些计算的类:
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);
}
感谢您阅读!