简单聊天室服务程序,前台假死问题

squalliskm 2005-12-22 07:59:33
我设置的是前台控制,点击startserver按钮,主窗体假死,但是后台运行正常。如果用客户端像服务器发送一条消息,主窗体假死现象消失,求保持目前框架的解决方法

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;

public class chatserver extends JFrame implements ActionListener
{
JPanel panebt =new JPanel();
JPanel panetxt =new JPanel();
JPanel pane =new JPanel();
JButton btstart =new JButton("start server");
JButton btbackup =new JButton("backup log");
JButton btstop =new JButton("stop server");
TextArea txtlog =new TextArea();
JFrame frame=new JFrame("my");

public chatserver()
{
pane.add(panetxt);
pane.add(panebt);

setContentPane(pane);
panetxt.add(txtlog);
panebt.add(btstart);
panebt.add(btbackup);
panebt.add(btstop);

panebt.setLayout(new BoxLayout(panebt,BoxLayout.X_AXIS));
panetxt.setLayout(new GridLayout(1,1,1,1));
pane.setLayout(new BoxLayout(pane,BoxLayout.Y_AXIS));
txtlog.setSize(800,600);
setLocation(80,80);
setTitle("server");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btstop.setEnabled(false);
pack();
show();


btstart.addActionListener(this);
btstop.addActionListener(this);
btbackup.addActionListener(this);

}


public static void main (String[] abc)
{
new chatserver();
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==btstart)
{
txtlog.append("server opening..........\n");
btstart.setEnabled(false);
btstop.setEnabled(true);
serverstart();
}
else if(e.getSource()==btbackup)
{

}
else if(e.getSource()==btstop)
{
txtlog.append("server stoping..........\n");
btstart.setEnabled(true);
btstop.setEnabled(false);
}


}

public void serverstart()
{
try
{
ServerSocket srv = new ServerSocket(2000);
txtlog.append("port 2000 opented...");
Socket sock= srv.accept();
BufferedReader br=new BufferedReader(
new InputStreamReader(
sock.getInputStream()
)
);


String str=br.readLine();

br.close();
}
catch (IOException e)
{
System.out.println("异常:"+e);
}
}
public void serverstop()
{

}
public void serverckup()
{

}
}
...全文
103 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
剑事 2005-12-22
  • 打赏
  • 举报
回复
要多线程才可以
zealVampire 2005-12-22
  • 打赏
  • 举报
回复
public void serverstart()
{
try
{
ServerSocket srv = new ServerSocket(2000);
txtlog.append("port 2000 opented...");
Socket sock= srv.accept();


因为你点按钮后启动这个方法.
Socket sock= srv.accept();是阻塞的, 就是说用户不来连接这个accept是不会返回的
所以假死,
可以新建一个线程.启动服务器.
squalliskm 2005-12-22
  • 打赏
  • 举报
回复
顶一下

62,624

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧