我设置的是前台控制,点击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()
{
}
}
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()
{
}
}
解决方案 »
- 命令行方式运行 报找不到jar包中的类??
- 一个java基础问题,怎么把字符串解析成date
- 概念问题:JDK和J2EE,J2SE,J2ME是什么关系
- **请教大家:canvas类中的paint()方法问题!急急急!**
- 还是中文问题,不过跟以前不一样。很怪就是找不到原因!
- 请帮忙。
- 我要在applet中显示一个tif文件,显示时需要有滚动条,运行时出现如下错误,救我!!!
- 如何把bufferedimage在内存中创建成的图片转换成byte数组...在线等待
- 用Graphic class 做图
- HELP!!!!!!!!!!!有关TOMCAT
- 关于写一个数据库的配置文件问题
- 我是新手谢谢大哥大姐了
{
try
{
ServerSocket srv = new ServerSocket(2000);
txtlog.append("port 2000 opented...");
Socket sock= srv.accept();
因为你点按钮后启动这个方法.
Socket sock= srv.accept();是阻塞的, 就是说用户不来连接这个accept是不会返回的
所以假死,
可以新建一个线程.启动服务器.