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> {

process 方法应该以 aList<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

您对过程方法的签名是错误的。

SwingWorker 的签名:protected void process(List<V> chunks)

V - 此 SwingWorker 的发布和处理方法用于执行中间结果的类型

所以应该是:

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