3

これが私のサンプルコードです...私のswingWorker拡張クラスがdoInBackground()をオーバーライドされたメソッドとしてしか表示しないという問題に直面しています。done() メソッドと process() メソッドも使用したいのですが、私のクラスでは @overrided が表示されず、while ループなどを呼び出す必要がある場合に done/process メソッドを呼び出すこともありません。これは無限ループであることはわかっているためですが、なぜでしょうか。プロセス メソッドは publish() で呼び出されませんか?

 public class getChatSwingWorkerThread extends SwingWorker<String , String> {
 private final JTextArea chat_text_area;
 private PostDataConnection post = null;
 private BasicUserInterface chatWindow = null;

public getChatSwingWorkerThread(JTextArea text_area){
    chatWindow = new BasicUserInterface();
    this.chat_text_area = text_area;
    post = new PostDataConnection();
}
@Override
protected String doInBackground() throws Exception {
    String returnData = "";
    while(true){
        returnData = post.getAvailableChat();
        if(!returnData.equals("")){
            publish(returnData);
            }
       } 

}
protected void process(String returnData) {

    chat_text_area.append(returnData);
}

 public void done(String returnData) throws InterruptedException, ExecutionException{
    chat_text_area.append(get());
}
4

1 に答える 1

5

これはprocessdoneメソッドとスーパークラスの署名が異なるためです。

processメソッドのシグネチャは

protected void process(List<V> chunks)

あなたの場合はどれに帰着しますか

protected void process(List<String> chunks)

メソッドにdoneパラメータがありません

protected void done()
于 2012-10-15T10:40:27.780 に答える