关于SWT线程的问题,急
我在做服务器侦听现成时候遇到的错误:
下面是我部分的源代码那位大大帮我看下
(前台)
……
LinkClientThread link;
link=new LinkClientThread(this);
final ServerSocket nServer=server;
(new Thread(){
public void run(){
link.start(nServer);
}
}
).start();
……
(后台)
public class LinkClientThread {
private ServerInterface gui;
private Node client;
public LinkClientThread(ServerInterface siGUI){
this.gui=siGUI;
}
public void start(ServerSocket server){
while(!server.isClosed()){
try{
client=new Node();
client.Socket=server.accept();
client.output=new ObjectOutputStream(client.Socket.getOutputStream());
client.output.flush();
client.input=new ObjectInputStream(client.Socket.getInputStream());
client.username=(String)client.input.readObject();
}
catch(Exception e){}
}
}
}
…………
红色的地方就是出错的地方
出错原因分别是:构造函数 LinkClientThread(<SelectionAdapter 的匿名子类>)未定义
和不能引用其它方法中定义的内部类中的非终态变量 link
我不知道为什么会有这个错,同样差不多的线程书上就没错
----------------解决方案--------------------------------------------------------
第一个问题我解决了,我把LinkClientThread link; link=new LinkClientThread(this);两句并在一起放在了主方法外,但又有新问题了,link.start(nServer);成了非静态变量的静态引用了,如果把LINK改成静态那THIS就会出错,请问这要怎么解决
----------------解决方案--------------------------------------------------------
LinkClientThread link;
final ServerSocket nServer=server;
link=new LinkClientThread(this, nServer);
link.start();
// maybe some time later
// if(some condition is true)
// {
// link.stop();
// }
……
(后台)
public class LinkClientThread implements Runnable
{
private ServerInterface gui;
private ServerSocket server;
private Node client;
private Thread thread;
public LinkClientThread(ServerInterface siGUI, ServerSocket server)
{
gui=siGUI;
this.server = server;
}
public void start()
{
thread = new Thread(this);
thread.setName("LinkClientThread");
thread.start();
}
public void stop()
{
thread = null;
}
public void run()
{
while(!server.isClosed() && thread != null)
{
try
{
client=new Node();
client.Socket=server.accept();
client.output=new ObjectOutputStream(client.Socket.getOutputStream());
client.output.flush();
client.input=new ObjectInputStream(client.Socket.getInputStream());
client.username=(String)client.input.readObject();
}
catch(Exception e){}
}
}
}
----------------解决方案--------------------------------------------------------