socket语句后的代码不执行

时间:2011-02-09 20:57:02

标签: java multithreading sockets


目前我正在开发一个需要套接字编程的项目,但是当我用来调用socket语句并从套接字的输入流中读取内容或者写一些内容时,应用程序崩溃并且没有任何东西可以工作,实际上是问题是处理按钮操作的代码和其他一些东西不起作用,执行将停止在调用创建读取socket输入流的方法的行。我几次用线程解决了这个问题,并在run方法中放入了与套接字一起使用的语句。用户界面工作正常,但我仍然没有良好的功能。这是调用方法的两行

Conection_Manager cm = new Conection_Manager(jTextField1.getText());
jTextArea1.setText(cm.getMessage());

在我用来调用连接管理器类中的方法的第一行中,套接字上的数据将被正确读取,我可以看到通过打印这些数据,但是在下一行中我想设置文本每个东西崩溃的字符串区域。如果有意义我在Jdialog中使用这两行语句 提前致谢

2 个答案:

答案 0 :(得分:0)

可能是阻止等待写入套接字的东西。这就是它出现崩溃的原因,实际上它只是在等待数据。你检查过数据是否真正被写入套接字?

此外,如果您在一个线程中执行所有操作(例如,没有Executor),服务器套接字会阻塞,直到收到连接为止

答案 1 :(得分:0)

我猜测崩溃你的意思是它会挂起。这是因为您试图在所谓的事件调度线程中执行冗长的操作,该线程处理所有Swing事件。为套接字连接生成新线程的解决方案是正确的,但不是等待线程完成(再次阻止EDT),而是需要从生成的线程更新GUI。

但要小心,这很棘手,因为Swing通常不是线程安全的,这意味着你不能简单地从其他线程更新控件。试试SwingWorker并确保您阅读有关EDT的内容,例如:http://java.sun.com/developer/technicalArticles/Threads/swing