0

JApplet 内の JLabel の更新に問題があります。SwingUtils.invokeLater を使用していますが、アプレットがブラウザ内にあると機能しません。NetBeans アプレット ビューアでテストすると正常に動作しますが、現在はブラウザで動作します。最初に呼び出したときにのみ更新されますsendMessage("Starting test 1");が、他の呼び出しsendMessageは GUI アプレットを更新しません。任意のヒント?

いくつかの計算を実行するクラスは次のとおりです。

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);
}

読んでくれてありがとう!

4

1 に答える 1

2

すべてのSwing GUI オブジェクトは、イベント ディスパッチ スレッド上でのみ構築および操作する必要があります。これは、アプリケーション、アプレット、およびハイブリッドに適用されます。このでは、代わりに.SwingWorkerRunnable

于 2013-07-17T12:02:09.620 に答える