当前位置: 代码迷 >> Java相关 >> 关于SWT线程的问题,急
  详细解决方案

关于SWT线程的问题,急

热度:281   发布时间:2005-09-28 16:55:00.0
关于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 我不知道为什么会有这个错,同样差不多的线程书上就没错
搜索更多相关的解决方案: 线程  SWT  

----------------解决方案--------------------------------------------------------
第一个问题我解决了,我把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() &amp;&amp; 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){}
    }
  }
}
----------------解决方案--------------------------------------------------------
  相关解决方案