Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t重写SwingWorker中的process()方法_Java_Multithreading_Swing_Swingworker_Event Dispatch Thread - Fatal编程技术网

Java Can';t重写SwingWorker中的process()方法

Java Can';t重写SwingWorker中的process()方法,java,multithreading,swing,swingworker,event-dispatch-thread,Java,Multithreading,Swing,Swingworker,Event Dispatch Thread,我的SwingWorker课程如下: class RemotePlayersWorker extends SwingWorker<String[][], Object> { PlayerCanvas parent; RemoteHandler remote; String[][] players; int maximumConnections; public RemotePlayersWorke

我的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() {

        }
    }
public class SwingWorker<T, V> {
    ...
    protected void process(List<V> chunks) {
        ...
    }
}
然而,据我所知,我正确地重写了该方法-无论我将列表类型设置为什么,我都会得到相同的错误

是否有任何其他原因使我无法重写进程()


我使用的是java版本“1.7.0_10”-java(TM)SE运行时环境(build 1.7.0_10-b18)

您对流程方法的符号是错误的

SwingWorker的签名:
受保护的无效流程(列表块)

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

因此,它应该是:

protected  void process(List<Object> chunks)
protectedvoid进程(列表块)

您的
进程()方法中的参数不正确

protected void process(List<Object> chunks) {
   /// do your stuff
}
在这里,您可以更纯粹地看到
process()
方法需要
V
,这就是您的
对象的情况


因此,要么将其更改为
列表
,要么撤销SwingWorker类的签名(但随后需要更改doInBackground()方法的返回类型)。

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

        }
    }
public class SwingWorker<T, V> {
    ...
    protected void process(List<V> chunks) {
        ...
    }
}
公共类SwingWorker{
...
受保护的无效进程(列表块){
...
}
}
既然你的子类被声明为

class RemotePlayersWorker extends SwingWorker<String[][], Object> {
类RemotePlayerWorker扩展SwingWorker{
处理方法应将
列表
作为参数,而不是
列表