6

次のような SwingWorker クラスがあります。

    class RemotePlayersWorker extends SwingWorker<String[][], Object> {
        PlayerCanvas parent;
        RemoteHandler remote;
        String[][] players;
        int maximumConnections;

        public RemotePlayersWorker(PlayerCanvas parentCanvas, RemoteHandler remoteHandle) {
            this.parent = parentCanvas;
            this.remote = remoteHandle;
        }

        @Override
        protected String[][] doInBackground() throws Exception {
            System.out.println("TEST 1");
            players = remote.getConnectedPlayers();
            publish(players);
            return players;
        }

        @Override
        protected void process(List<String[][]> chunks) {
            for (String[][] chunk : chunks) {
                 // no need for the c variable
                 System.out.println(chunk.toString());
              }
        }

        @Override 
        protected void done() {

        }
    }

しかし、process(List chunks) メソッドをオーバーライドするとエラーが発生します。Eclipseは私にこれを教えてくれます:

The method process(List) of type PlayerHandler.RemotePlayersWorker must override or implement a supertype method

ただし、私が知る限り、メソッドを正しくオーバーライドしています-リストタイプの設定に関係なく、同じエラーが発生します。

process() をオーバーライドできない他の理由はありますか?

Java バージョン「1.7.0_10」を使用しています - Java(TM) SE ランタイム環境 (ビルド 1.7.0_10-b18)

4

3 に答える 3

6

SwingWorker クラスは次のように定義されています。

public class SwingWorker<T, V> {
    ...
    protected void process(List<V> chunks) {
        ...
    }
}

したがって、サブクラスは次のように宣言されているため、

class RemotePlayersWorker extends SwingWorker<String[][], Object> {

プロセス メソッドはList<Object>、引数として ではなく を受け取る必要があります。List<String[][]>

于 2013-03-17T09:15:56.973 に答える
4

process()メソッドに間違ったパラメーターがあります。

protected void process(List<Object> chunks) {
   /// do your stuff
}

2日かかります。SwingWorkerクラスの一般的なデータ型。ドキュメントをお読みください。

説明:

public class SwingWorker<T, V> {

    // methods

    protected void process(List<V> chunks) {
       // do your stuff
    }
}

ここでは、より純粋に、あなたの場合のprocess()メソッドが取るものを見ることができます。VObject

したがってList<Object>、SwingWorker クラスの署名を変更するか、逆にする必要があります (ただし、doInBackground() メソッドの戻り値の型を変更する必要があります)。

于 2013-03-17T09:15:51.827 に答える
3

process メソッドの署名が間違っています。

SwingWorker からの署名:protected void process(List<V> chunks)

V - この SwingWorker のパブリッシュおよびプロセス メソッドによって中間結果を実行するために使用される型

したがって、次のようになります。

protected  void process(List<Object> chunks)
于 2013-03-17T09:15:42.860 に答える