Java Can';t重写SwingWorker中的process()方法
我的SwingWorker课程如下: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
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{
处理方法应将列表
作为参数,而不是列表