各位大虾麻烦帮我看看为什么我GUI界面无法显示?

hnalenx 2010-04-29 11:22:34
源代码如下,各位大虾麻烦你们给出原因:
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.util.concurrent.*;
import java.awt.*;
public class MutilThreadServer extends JFrame{
private JTextArea jta=new JTextArea();
public MutilThreadServer(){
add(new JScrollPane(jta));
/*setTitle("MutilThreadServer");
setSize(500,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);*/
ExecutorService executor=Executors.newCachedThreadPool();
try{
ServerSocket serverSocket=new ServerSocket(8000);
jta.append("MutilThreadServer start at "+new Date()+'\n');
int clientNo=1;
while(true){
Socket socket=serverSocket.accept();
jta.append("Starting thread for client "+clientNo+"at "+new Date()+'\n');
InetAddress address=socket.getInetAddress();
jta.append("Client "+clientNo+"'s host name is "+address.getHostName()+'\n');
jta.append("Client "+clientNo+"'s IP Address is"+address.getHostAddress()+'\n');
executor.execute(new handleClient(socket));
clientNo++;
}
}
catch(IOException ex){
System.err.println(ex);
}
finally{
executor.shutdown();
}
}
public static void main(String[] args){
MutilThreadServer frame=new MutilThreadServer();
frame.setTitle("MutilThreadServer");
frame.setSize(500,300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private class handleClient implements Runnable{
private Socket socket;
DataInputStream in;
DataOutputStream out;
public handleClient(Socket socket){
this.socket=socket;
}
public void run(){
try{
in=new DataInputStream(socket.getInputStream());
out=new DataOutputStream(socket.getOutputStream());
double radius=in.readDouble();
double area=radius*radius*Math.PI;
out.writeDouble(area);
jta.append("Radius recevie from client: "+radius+'\n');
jta.append("Area found: "+area+'\n');
}
catch(IOException ex){
System.out.println(ex);
}
}
}
}

如果把上面代码里面的注释语句的注释符号/* */删除,然后将main函数里面的函数体中语句全部替换成new MutilThreadServer(),然后GUI界面却显示出来了,各位大虾告诉我这是怎么回事?
...全文
220 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dejinzhao 2010-05-05
  • 打赏
  • 举报
回复
一般在调用frame.setVisible(true);前加一句frame.pack();
空~自由 2010-05-03
  • 打赏
  • 举报
回复
while(true) 死循环
pl0528 2010-05-02
  • 打赏
  • 举报
回复
几处地方我给你修改了一下
public MutilThreadServer() {
super();
setContentPane(new JScrollPane(jta));

// add(new JScrollPane(jta));
/*
* setTitle("MutilThreadServer"); setSize(500,300);
* setLocationRelativeTo(null); setDefaultCloseOperation
* (JFrame.EXIT_ON_CLOSE); setVisible(true);
*/




// while (true) {
// Socket socket = serverSocket.accept();
// jta.append("Starting thread for client " + clientNo + "at "
// + new Date() + '\n');
// InetAddress address = socket.getInetAddress();
// jta.append("Client " + clientNo + "'s host name is "
// + address.getHostName() + '\n');
// jta.append("Client " + clientNo + "'s IP Address is"
// + address.getHostAddress() + '\n');
// executor.execute(new handleClient(socket));
// clientNo++;
// }

你这个循环一直为真吧,都跳不出循环,走不到frame.setVisible(true); 这一句,你怎么看到frame啊?
a281346230 2010-05-01
  • 打赏
  • 举报
回复
setVisible(true);
小小咖啡豆 2010-04-30
  • 打赏
  • 举报
回复
来学习学习!
一头头 2010-04-30
  • 打赏
  • 举报
回复
搞不清楚你要怎么样哇

这样也可以用啊

package test11;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.util.concurrent.*;
import java.awt.*;
public class MutilThreadServer extends JFrame{
private JTextArea jta=new JTextArea();
public MutilThreadServer(){
add(new JScrollPane(jta));
setTitle("MutilThreadServer");
setSize(500,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
ExecutorService executor=Executors.newCachedThreadPool();
try{
ServerSocket serverSocket=new ServerSocket(8000);
jta.append("MutilThreadServer start at "+new Date()+'\n');
int clientNo=1;
while(true){
Socket socket=serverSocket.accept();
jta.append("Starting thread for client "+clientNo+"at "+new Date()+'\n');
InetAddress address=socket.getInetAddress();
jta.append("Client "+clientNo+"'s host name is "+address.getHostName()+'\n');
jta.append("Client "+clientNo+"'s IP Address is"+address.getHostAddress()+'\n');
executor.execute(new handleClient(socket));
clientNo++;
}
}
catch(IOException ex){
System.err.println(ex);
}
finally{
executor.shutdown();
}
}
public static void main(String[] args){
MutilThreadServer frame=new MutilThreadServer();
// frame.setTitle("MutilThreadServer");
// frame.setSize(500,300);
// frame.setLocationRelativeTo(null);
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// frame.setVisible(true);
}
private class handleClient implements Runnable{
private Socket socket;
DataInputStream in;
DataOutputStream out;
public handleClient(Socket socket){
this.socket=socket;
}
public void run(){
try{
in=new DataInputStream(socket.getInputStream());
out=new DataOutputStream(socket.getOutputStream());
double radius=in.readDouble();
double area=radius*radius*Math.PI;
out.writeDouble(area);
jta.append("Radius recevie from client: "+radius+'\n');
jta.append("Area found: "+area+'\n');
}
catch(IOException ex){
System.out.println(ex);
}
}
}
}
dam528 2010-04-30
  • 打赏
  • 举报
回复
友情帮顶,坚决消灭0回复!顶完睡觉
huntor 2010-04-30
  • 打赏
  • 举报
回复
while(true){...}阻塞了线程
ifrancis 2010-04-30
  • 打赏
  • 举报
回复
用断点 抛空指针异常
huang06252 2010-04-30
  • 打赏
  • 举报
回复
22222
huang06252 2010-04-30
  • 打赏
  • 举报
回复
1111111
huntor 2010-04-30
  • 打赏
  • 举报
回复
try{...}catch..finally...
=> SwingUtilites.invokeLater(new Runnable(){public void run(){ try...catch...finally...}});
可以显示出GUI,
不过好像还是不正常
aSysBang 2010-04-30
  • 打赏
  • 举报
回复
frame.setVisible(true);
问题出在这句话上 默认构造函数里面 创建的frame 是不可见的
你先创建一个不可见的 后来设置属性可见 但是 界面不会因为你修改属性就刷新了
所以设置可见属性要在构造函数里面

62,621

社区成员

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

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