我要是在按钮里面new,点击按钮之后,直接就卡在那里啦,显示的窗口里面没东西,好长时间才显示完全
换句话说,就是在main里new速度快,在按钮里new 反应很慢
望高人指点代码如下:package chatSystem;import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.List;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;
import java.io.*;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ChatFrame extends JFrame{
String savechat="";
Socket Server;
boolean yesornot=false;
List friendlist=new List();
JSplitPane jsp=null;
JPanel jp0=new JPanel();
JPanel jpWest=new JPanel();
JPanel jpEast=new JPanel();
JPanel jpSouth=new JPanel();
JPanel jp1=new JPanel();
JPanel jp2=new JPanel();
JPanel jp3=new JPanel();
JPanel jp4=new JPanel();
JPanel jp5=new JPanel();
JPanel jp6=new JPanel();
JScrollPane jspcenter=new JScrollPane();
JScrollPane jspeast=new JScrollPane();
JScrollPane jspsouth=new JScrollPane();
JMenuBar mb=new JMenuBar();
JMenu mFile = new JMenu("文 件");
JMenu mHelp = new JMenu("帮 助");
JMenuItem exit=new JMenuItem("退出");
JMenuItem help=new JMenuItem("关于");
JButton start=new JButton("开始聊天");
JButton administer=new JButton("聊天管理");
JLabel display=new JLabel();
JLabel leftdisplay=new JLabel("<html>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br><▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>");
JLabel friendlable=new JLabel("用户列表");
JLabel uplabel=new JLabel("聊天室公告");
JLabel centerlabel=new JLabel("<html>此处为聊天室公告,<br>管理员可以修改!!");
JLabel downlabel=new JLabel("↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
JLabel leftlabel=new JLabel("<html>→<br><→<br>→<br>→<br>→<br>→<br>→<br>");
JLabel rightlabel=new JLabel("<html>←<br>←<br>←<br>←<br>←<br>←<br>←<br>");
JLabel frontclew=new JLabel("欢迎来到聊天室,祝您聊的开心!");
JLabel leftclew=new JLabel("<html>请<br>遵否<br>守则<br>聊将<br>天被<br>室踢<br>规出<br>章");
JButton sidle=new JButton("悄悄话▲");
JButton expression=new JButton("表情▲");
JButton font=new JButton("字体▲");
JButton history=new JButton("历史记录▲");
JButton cls=new JButton("清屏");
JButton enter=new JButton("发送");
JButton cleanout=new JButton("清空");
JTextArea chattest=new JTextArea();
String serviceip;
int serviceportnum;
public ChatFrame(String ip,int portnum){
serviceip=ip;
serviceportnum=portnum;
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this.setBounds(screenSize.width/2-400, screenSize.height/2-300, 800, 600);
this.setTitle("聊天室");
mb.add(mFile);
mb.add(mHelp);
mFile.add(exit);
mHelp.add(help);
this.setJMenuBar(mb);
jp0 = (JPanel) this.getContentPane();
jp0.setLayout(new BorderLayout());
jp0.add(jpWest,BorderLayout.WEST);
BorderLayout glout=new BorderLayout();
glout.setVgap(60);
jpWest.setLayout(glout);
jpWest.add(start,BorderLayout.NORTH);
jp1.setLayout(new BorderLayout());
jp1.add(administer,BorderLayout.NORTH);
leftclew.setFont(new Font("宋体",3,30));
jp1.add(leftclew,BorderLayout.CENTER);
jpWest.add(jp1,BorderLayout.CENTER);
jsp=new JSplitPane(JSplitPane.VERTICAL_SPLIT,jp4,jpSouth);
jspcenter.setViewportView(display);
jp4.setLayout(new BorderLayout());
jp4.add(leftdisplay,BorderLayout.WEST);
jp4.add(jspcenter,BorderLayout.CENTER);
jp2.add(sidle);
jp2.add(expression);;
jp2.add(font);
jp2.add(history);
jp2.add(cls);
jpSouth.setLayout(new BorderLayout());
jpSouth.add(jp2,BorderLayout.NORTH);
chattest.setFont(new Font("宋体",1,40));
chattest.setLineWrap(true);
jspsouth.setViewportView(chattest);
jp3.setLayout(new BorderLayout());
jp3.add(enter,BorderLayout.NORTH);
jp3.add(cleanout,BorderLayout.SOUTH);
jpSouth.add(jspsouth,BorderLayout.CENTER);
jpSouth.add(jp3,BorderLayout.EAST);
jp0.add(jsp,BorderLayout.CENTER);
frontclew.setFont(new Font("宋体",1,40));
frontclew.setHorizontalAlignment(JTextField.CENTER);
jp0.add(frontclew,BorderLayout.NORTH);
jp5.setLayout(new BorderLayout());
uplabel.setHorizontalAlignment(JTextField.CENTER);
jp5.add(uplabel,BorderLayout.NORTH);
jp5.add(downlabel,BorderLayout.SOUTH);
jp5.add(leftlabel,BorderLayout.WEST);
jp5.add(rightlabel,BorderLayout.EAST);
centerlabel.setHorizontalAlignment(JTextField.CENTER);
jp5.add(centerlabel,BorderLayout.CENTER);
jp6.setLayout(new BorderLayout());
friendlable.setHorizontalAlignment(JTextField.CENTER);
jp6.add(friendlable,BorderLayout.NORTH);
jp6.add(friendlist,BorderLayout.CENTER);
jpEast.setLayout(new BorderLayout());
jpEast.add(jp5,BorderLayout.NORTH);
jpEast.add(jp6,BorderLayout.CENTER);
jp0.add(jpEast,BorderLayout.EAST);
help.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
javax.swing.JOptionPane.showMessageDialog(null, " 作者:英雄小强\n" + " 英文名为:hero\n" + " 希望大家多多支持", "我的基本信息", JOptionPane.INFORMATION_MESSAGE);
}});
exit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
yesornot=true;
System.exit(0);
}
});
font.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new MyFont(chattest);
}});
this.setVisible(true);
try {
client();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public void client()throws Exception{
savechat=savechat+"<html>";
Server = new Socket(serviceip,serviceportnum);
BufferedReader in = new BufferedReader(new InputStreamReader(Server.getInputStream()));
final PrintWriter out = new PrintWriter(Server.getOutputStream());
enter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String str = chattest.getText();
out.println(str);
out.flush();
}});
while (true) {
String str=in.readLine();
savechat=savechat+str+"<br>";
display.setText(savechat);
savechat=savechat+"<br>";
if (yesornot) {
break;
}
}
in.close();
out.close();
Server.close();
}}
换句话说,就是在main里new速度快,在按钮里new 反应很慢
望高人指点代码如下:package chatSystem;import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.List;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;
import java.io.*;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ChatFrame extends JFrame{
String savechat="";
Socket Server;
boolean yesornot=false;
List friendlist=new List();
JSplitPane jsp=null;
JPanel jp0=new JPanel();
JPanel jpWest=new JPanel();
JPanel jpEast=new JPanel();
JPanel jpSouth=new JPanel();
JPanel jp1=new JPanel();
JPanel jp2=new JPanel();
JPanel jp3=new JPanel();
JPanel jp4=new JPanel();
JPanel jp5=new JPanel();
JPanel jp6=new JPanel();
JScrollPane jspcenter=new JScrollPane();
JScrollPane jspeast=new JScrollPane();
JScrollPane jspsouth=new JScrollPane();
JMenuBar mb=new JMenuBar();
JMenu mFile = new JMenu("文 件");
JMenu mHelp = new JMenu("帮 助");
JMenuItem exit=new JMenuItem("退出");
JMenuItem help=new JMenuItem("关于");
JButton start=new JButton("开始聊天");
JButton administer=new JButton("聊天管理");
JLabel display=new JLabel();
JLabel leftdisplay=new JLabel("<html>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br><▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>▁▂▁<br>");
JLabel friendlable=new JLabel("用户列表");
JLabel uplabel=new JLabel("聊天室公告");
JLabel centerlabel=new JLabel("<html>此处为聊天室公告,<br>管理员可以修改!!");
JLabel downlabel=new JLabel("↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
JLabel leftlabel=new JLabel("<html>→<br><→<br>→<br>→<br>→<br>→<br>→<br>");
JLabel rightlabel=new JLabel("<html>←<br>←<br>←<br>←<br>←<br>←<br>←<br>");
JLabel frontclew=new JLabel("欢迎来到聊天室,祝您聊的开心!");
JLabel leftclew=new JLabel("<html>请<br>遵否<br>守则<br>聊将<br>天被<br>室踢<br>规出<br>章");
JButton sidle=new JButton("悄悄话▲");
JButton expression=new JButton("表情▲");
JButton font=new JButton("字体▲");
JButton history=new JButton("历史记录▲");
JButton cls=new JButton("清屏");
JButton enter=new JButton("发送");
JButton cleanout=new JButton("清空");
JTextArea chattest=new JTextArea();
String serviceip;
int serviceportnum;
public ChatFrame(String ip,int portnum){
serviceip=ip;
serviceportnum=portnum;
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this.setBounds(screenSize.width/2-400, screenSize.height/2-300, 800, 600);
this.setTitle("聊天室");
mb.add(mFile);
mb.add(mHelp);
mFile.add(exit);
mHelp.add(help);
this.setJMenuBar(mb);
jp0 = (JPanel) this.getContentPane();
jp0.setLayout(new BorderLayout());
jp0.add(jpWest,BorderLayout.WEST);
BorderLayout glout=new BorderLayout();
glout.setVgap(60);
jpWest.setLayout(glout);
jpWest.add(start,BorderLayout.NORTH);
jp1.setLayout(new BorderLayout());
jp1.add(administer,BorderLayout.NORTH);
leftclew.setFont(new Font("宋体",3,30));
jp1.add(leftclew,BorderLayout.CENTER);
jpWest.add(jp1,BorderLayout.CENTER);
jsp=new JSplitPane(JSplitPane.VERTICAL_SPLIT,jp4,jpSouth);
jspcenter.setViewportView(display);
jp4.setLayout(new BorderLayout());
jp4.add(leftdisplay,BorderLayout.WEST);
jp4.add(jspcenter,BorderLayout.CENTER);
jp2.add(sidle);
jp2.add(expression);;
jp2.add(font);
jp2.add(history);
jp2.add(cls);
jpSouth.setLayout(new BorderLayout());
jpSouth.add(jp2,BorderLayout.NORTH);
chattest.setFont(new Font("宋体",1,40));
chattest.setLineWrap(true);
jspsouth.setViewportView(chattest);
jp3.setLayout(new BorderLayout());
jp3.add(enter,BorderLayout.NORTH);
jp3.add(cleanout,BorderLayout.SOUTH);
jpSouth.add(jspsouth,BorderLayout.CENTER);
jpSouth.add(jp3,BorderLayout.EAST);
jp0.add(jsp,BorderLayout.CENTER);
frontclew.setFont(new Font("宋体",1,40));
frontclew.setHorizontalAlignment(JTextField.CENTER);
jp0.add(frontclew,BorderLayout.NORTH);
jp5.setLayout(new BorderLayout());
uplabel.setHorizontalAlignment(JTextField.CENTER);
jp5.add(uplabel,BorderLayout.NORTH);
jp5.add(downlabel,BorderLayout.SOUTH);
jp5.add(leftlabel,BorderLayout.WEST);
jp5.add(rightlabel,BorderLayout.EAST);
centerlabel.setHorizontalAlignment(JTextField.CENTER);
jp5.add(centerlabel,BorderLayout.CENTER);
jp6.setLayout(new BorderLayout());
friendlable.setHorizontalAlignment(JTextField.CENTER);
jp6.add(friendlable,BorderLayout.NORTH);
jp6.add(friendlist,BorderLayout.CENTER);
jpEast.setLayout(new BorderLayout());
jpEast.add(jp5,BorderLayout.NORTH);
jpEast.add(jp6,BorderLayout.CENTER);
jp0.add(jpEast,BorderLayout.EAST);
help.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
javax.swing.JOptionPane.showMessageDialog(null, " 作者:英雄小强\n" + " 英文名为:hero\n" + " 希望大家多多支持", "我的基本信息", JOptionPane.INFORMATION_MESSAGE);
}});
exit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
yesornot=true;
System.exit(0);
}
});
font.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new MyFont(chattest);
}});
this.setVisible(true);
try {
client();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public void client()throws Exception{
savechat=savechat+"<html>";
Server = new Socket(serviceip,serviceportnum);
BufferedReader in = new BufferedReader(new InputStreamReader(Server.getInputStream()));
final PrintWriter out = new PrintWriter(Server.getOutputStream());
enter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String str = chattest.getText();
out.println(str);
out.flush();
}});
while (true) {
String str=in.readLine();
savechat=savechat+str+"<br>";
display.setText(savechat);
savechat=savechat+"<br>";
if (yesornot) {
break;
}
}
in.close();
out.close();
Server.close();
}}
解决方案 »
- 高手专家进--谁能详细的描述下堆和栈
- 分享一个集合删除元素的小技巧[高手轻拍]
- 调用一个方法,如果其在一定时间内没返回,如何赋一个默认值?
- 我用的是sql server for jdbc 的驱动程序,发现1433端口没有侦听怎么办?
- 怎么样输入字符串啊?
- 用jdbc对数据库进行插入操作出错了!
- 请问谁知道jbuilder7.0的注册码?
- 这是一个用ASP程序中的问题,很紧急!
- 急求java调用dll动态链接库的方法?本人新手的说
- JB中用verticalflowlayout,明明把两个panel的位置调好的,一运行位置就自动变了,好像默认位置一样,请问怎样解决?
- 求助一个读取XML的问题
- 怎样在xml中定义校验字符串的正则表达式
client();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
可能是这段。
使用一个WindowListener监听 JFrame,在 windowOpened 方法里用一个单独的线程启动上面那段代码。
savechat="<html>";
Server = new Socket(serviceip,serviceportnum);
final PrintWriter out = new PrintWriter(Server.getOutputStream());
enter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String str = chattest.getText();
out.println(str);
out.flush();
out.close();
}});
out.close();
Thread thread=new Thread(this);
thread.start();
}
public void run() {
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(Server.getInputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while (true) {
String str = null;
try {
str = in.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
savechat=savechat+str+"<br>";
display.setText(savechat);
if (yesornot) {
break;
}
}
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Server.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}