Java 窗体与线程问题
自己看视频写了一个服务器端和客户端的窗口程序用于多人聊天,但服务器端绑定端口号后点击启动时会的代码如下try{ss=newServerSocket(Integer.val...
自己看视频写了一个服务器端和客户端的窗口程序用于多人聊天,但服务器端绑定端口号后点击启动时会的代码如下
try
{
ss = new ServerSocket(Integer.valueOf(jTextField1.getText()));
jLabel2.setText("运行中");
}
catch (NumberFormatException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
while(true)
{
try
{
//循环接受socket请求
Socket socket = ss.accept();//ss是ServerSocket
System.out.println("helloworld");
new ServerLinkThread(this ,socket).start();
}
catch(Exception e)
{
}
}
但当启动后窗体总是无法关闭,而且 jLabel2.setText("运行中");也无法执行,而当注释掉线程启动的代码时就能正常运行,不知道是那里出错,求大神指导。 展开
try
{
ss = new ServerSocket(Integer.valueOf(jTextField1.getText()));
jLabel2.setText("运行中");
}
catch (NumberFormatException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
while(true)
{
try
{
//循环接受socket请求
Socket socket = ss.accept();//ss是ServerSocket
System.out.println("helloworld");
new ServerLinkThread(this ,socket).start();
}
catch(Exception e)
{
}
}
但当启动后窗体总是无法关闭,而且 jLabel2.setText("运行中");也无法执行,而当注释掉线程启动的代码时就能正常运行,不知道是那里出错,求大神指导。 展开
展开全部
主窗口线程不能阻塞,也就是说应该处于空闲状态。
如果阻塞,窗口将不能响应用户事件。
程序应该类似于这样
public class ServerFrame extends JFrame {
public ServerFrame() {
//设置其他窗口参数
//设置标签:运行中
new ListenerThread().start();
}
}
public class ListenerThread extends Thread {
public void run() {
ServerSocket server = null;
try {
server = ...
while (true) {
Socket accept = server.accept();
new LinkThread(accept).start();
}
} catch(...) {
}
}
}
更多追问追答
追问
那有什么解决办法
追答
不是给了示例代码了吗?
就是要让主窗口线程闲着,另开一个线程去监听。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询