java.net.Socket和GUI的问题 你直接设置一个监听的程序就是那,时刻运行就是那socket有流过来就输出来就是那!一定要有触发产生吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果Socket有数据来,你相关的接受流,就会接受到数据。啥叫“因为Socket没有数据到达的通知”啊,不会有这种情况的。 在线程的 run() 中不断读 Socket 的内容,不为 null 则输出 运行一个线程,用来执行Socket流的读取和写到GUI里。效率是不是高,不太清楚,但是一般都是这样做的吧。 没听说过,有别的办法。即使实现如同到达通知,也是基于启动一个不断测试socket内容的线程,若有数据,就发送数据到达通知,相应的注册监听类进行处理(这里就是显示接收到内容)。 在线程的 run() 中不断读 Socket 的内容,不为 null 则输出这种方法效率会不会太低了。我是过这个方法,感觉界面有停滞的迹象,是不是我应该把线成的优先级降低?有一个叫IPWorks的东西,里面有一个IPPort类,里面有几个方法,比如有数据到达fireDataIn方法会被自动调用,只要我继承这个类,并重载这个方法,就可以实现。但是我想他内部也是用Socket类实现的吧。因为这个东西要cd-key的,所以我没办法在我自己的prj中使用,我只是想做一个简单的调试工具. 或者哪位老兄贴一段让Thread后台运行的例子给我吧。这是我线程类的代码public class ReadThread extends Thread { private Socket s; public ReadThread(Socket s) { this.s = s; } public void run() { while (true) { try { InputStream is = s.getInputStream(); byte[] buff = new byte[10000]; int readByte; if ( (readByte = is.read(buff)) != -1) { System.out.println(new String(buff, 0, readByte)); } else { return; } } catch (Exception e) { System.out.println("--------------- In thread."); e.printStackTrace(); } } }}这是我的GUI中调用的方法 private boolean connectSvr() { try { sock = new Socket(textIP.getText(), Integer.parseInt(textPort.getText())); ReadThread rt = new ReadThread(sock); rt.setDaemon(true); rt.setPriority(Thread.MIN_PRIORITY); rt.run(); return true; } catch (Exception e) { e.printStackTrace(); return false; } }现在的情况是,rt.run()一旦被运行,界面就不动了。 求助 用java显示三维的散点图 大家帮忙看看,很简单但出错了 java能做语音通讯的软件吗?像QQ语音聊天那样! 请高手帮看看这个数组循环的小程序 java中日期格式的问题,求教 关于进度条的问题,请高手指教?分不够再加 湖人又来了!! 50分求助:毕业设计,在线急等,谢谢 alin19(资深爪哇师傅) 请进 ****200分大放送!(肯定给)解决applet与二进制数组问题**** ***一段关于计算年龄的小代码,有些地方有点弄不懂**** 怎样用验证一个字符是否在arraylist中存在(在线等)
啥叫“因为Socket没有数据到达的通知”啊,不会有这种情况的。
效率是不是高,不太清楚,但是一般都是这样做的吧。
即使实现如同到达通知,也是基于启动一个不断测试socket内容的线程,若有数据,就发送数据到达通知,相应的注册监听类进行处理(这里就是显示接收到内容)。
fireDataIn方法会被自动调用,只要我继承这个类,并重载这个方法,就可以实现。但是我想
他内部也是用Socket类实现的吧。因为这个东西要cd-key的,所以我没办法在我自己的prj中使用
,我只是想做一个简单的调试工具.
public class ReadThread extends Thread {
private Socket s;
public ReadThread(Socket s) {
this.s = s;
}
public void run() {
while (true) {
try {
InputStream is = s.getInputStream();
byte[] buff = new byte[10000];
int readByte;
if ( (readByte = is.read(buff)) != -1) {
System.out.println(new String(buff, 0, readByte));
}
else {
return;
}
}
catch (Exception e) {
System.out.println("--------------- In thread.");
e.printStackTrace();
}
}
}
}这是我的GUI中调用的方法
private boolean connectSvr() {
try {
sock = new Socket(textIP.getText(),
Integer.parseInt(textPort.getText()));
ReadThread rt = new ReadThread(sock);
rt.setDaemon(true);
rt.setPriority(Thread.MIN_PRIORITY);
rt.run();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}现在的情况是,rt.run()一旦被运行,界面就不动了。