【发布时间】:2011-06-27 06:45:21
【问题描述】:
基本上,我需要解析一个 XML 文件,将其放入类对象的 ArrayList 中,然后将其(以及套接字)传递给线程。然后,该线程将对给定的 ArrayList 执行一些功能,并将结果传递回套接字。我的问题是,我无法将解析后的数据以 ArrayList 的形式传递给线程。
这里有一些代码:
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
boolean listening = true;
/*xml parsing is done, result is saved in ArrayList<class> peds*/
try {
serverSocket = new ServerSocket(4444);
} catch (IOException e) {
System.err.println("Could not listen on port: 4444." + e);
System.exit(-1);
}
while (listening){
Socket s = serverSocket.accept();
Runnable proExec = new KKMultiServerThread( s, peds); **
Thread th = new Thread (proExec)
th.start(); }
serverSocket.close();
}
class KKMultiServerThread implements Runnable{
private Socket socket = null;
public final ArrayList<show> peds;
public KKMultiServerThread(Socket socket, ArrayList<show> peds) {
this.socket = socket;
this.peds = peds;
}
** 问题出现在这一行。说 :non-static 变量不能从静态上下文中引用。
已经尝试了所有可能的组合(例如将可运行类放在另一个文件中,并调用函数返回数据结构.. IDE 不允许我这样做。)
似乎这个问题唯一可能的剩余解决方案是解析 xml 文件并将其保存在每个线程的数据结构中......这似乎成本太高而无法高效。
请帮忙!
【问题讨论】:
-
我很困惑..您的
main()方法和KKMultiServerThread类是同一个类文件的一部分吗?另外,如果KKMultiServerThread是一个内部类,我可以理解为什么你会收到这个错误,因为它需要被声明为静态的。
标签: java multithreading sockets data-structures