5

スイングワーカーからEDTを操作する一般的な方法は、get()メソッドを使用することです。しかし、私には次のような長いタスクとコードがあります。

public Void doInBackground() {
    for(Object o : objects) {
         doSomething();
         MyGlobalGUIConsole.addMessage("Done for " + o);
    }
}

ほとんどのtutotialsでは、戻り値を使用してSwingWorkerからEDTに何かを戻すことをお勧めしますが、次のことを行うことができます。

public Void doInBackground() {
    for(Object o : objects) {
        doSomething();
        SwingUtilities.invokeLater(new Runnable() {        
            @Override                                      
            public void run() {                            
                MyGlobalGUIConsole.addMessage("Done for " + o);
            }                                              
        });                                                
    }
}
4

1 に答える 1

9

publish()できますが、SwingWorker にはバックグラウンド タスクの進行状況を報告するように設計されたメソッドがdoInBackground()ありますprocess()。したがって、上記のコードは次のように書き換えることができます。

public Void doInBackground() {
    for(Object o : objects) {
        doSomething();
        publish("Done for " + o);                           
    }                                             
}

@Override
protected void process(List<String> messages) {
    for (String message : messages) {
        MyGlobalGUIConsole.addMessage(message);
    }
}
于 2012-08-10T08:11:06.963 に答える