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("运行中");也无法执行,而当注释掉线程启动的代码时就能正常运行,不知道是那里出错,求大神指导。
展开
 我来答
fuhaiwei
推荐于2016-08-19 · TA获得超过3409个赞
知道大有可为答主
回答量:974
采纳率:75%
帮助的人:1391万
展开全部

主窗口线程不能阻塞,也就是说应该处于空闲状态。

如果阻塞,窗口将不能响应用户事件。


程序应该类似于这样

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(...) {
        
        }
    }
}
更多追问追答
追问
那有什么解决办法
追答
不是给了示例代码了吗?
就是要让主窗口线程闲着,另开一个线程去监听。
幽灵军团a330
2014-09-04 · 超过56用户采纳过TA的回答
知道答主
回答量:113
采纳率:0%
帮助的人:107万
展开全部
我试了你的代码,怎么都不变哈~~
把setBackground那句前面改成:
getContentPane().setBackground,
Frame的东西要通过contentPane操作。
追问
能讲清楚点吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式