biz*_*zr3 4 java sockets swing multithreading
我正在尝试使用java制作多线程服务器/客户端应用程序!此代码用于名为Bsocket(iserver.core.socket)的包的类中的listen()方法:
try {
serverSocket = new ServerSocket(port);
}catch(IOException e ){
ui.log(e.toString());//*
}
while (true){
try{
clienSocket = serverSocket.accept();
ui.log("Incomming Connection.");//*
new connectionHandler(clienSocket, ui);
}catch(IOException e ){
ui.log(e.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
ui.log("Incomming Connection.");是Bgui(iserver.core.ui)主类下面的方法.Bgui是一个包含textarea和其他内容的jframe!问题是当accept方法执行时,ui.log没有用!什么错了?
您需要在单独的线程上启动服务器,因为.accept它是阻塞调用.您可能想要这样做:
(new Runnable() {
@Override
public void run()
{
try {
serverSocket = new ServerSocket(port);
}catch(IOException e ){
ui.log(e.toString());//*
}
while (true){
try{
clienSocket = serverSocket.accept();
ui.log("Incomming Connection.");//*
new connectionHandler(clienSocket, ui);
}catch(IOException e ){
ui.log(e.toString());
}
}
}
}).start();
Run Code Online (Sandbox Code Playgroud)
注意:此代码未经过测试,但它应该让您了解需要执行的操作.
您需要将 UI 线程与您自己的网络服务线程分开。accept() 正在阻塞(显然)并且它会冻结您的应用程序,直到您获得新客户端,然后再次冻结等待更多客户端。
| 归档时间: |
|
| 查看次数: |
5147 次 |
| 最近记录: |