【发布时间】:2013-12-09 13:53:59
【问题描述】:
我正在开发一个使用套接字的 Java 项目。由于 Socket 方法是阻塞方法,我不得不制作一个多线程应用程序。
到目前为止,我能够从其他应用程序读取传入的字节。我将它们写入 StringBuilder。我的问题是如何将此字符串返回到我的主线程。我在想一个事件之类的东西,我可以在 Socket-Thread 读完后立即调用它。
我很高兴有任何想法。
public class SocketRunnable implements Runnable {
private final Socket _socket;
public SocketRunnable(Socket socket){
this._socket = socket;
}
@Override
public void run() {
StringBuilder sb = new StringBuilder();
try {
BufferedReader bufferedReader =
new BufferedReader(
new InputStreamReader(
this._socket.getInputStream()));
char[] buffer = new char[100];
int amountOfBytes = bufferedReader.read(buffer, 0, 100); // blocks until the message is received.
String message = new String(buffer, 0, amountOfBytes);
sb.append(message);
} catch (IOException ex) {
Logger.getLogger(SocketRunnable.class.getName()).log(Level.SEVERE, null, ex);
}
finally{
// Return (!)
}
}
【问题讨论】:
-
为什么要把它返回到你的主线程?你需要对这个返回的字符串做什么?
-
我想让它在文本框中可见。所以我想把这个字符串返回给处理这个人的 mainThread。
-
如果您在 Swing 上,则使用
EventQueue.invokeLater将事件发布到 Event-Dispatch 线程。但我怀疑您的问题在于切换线程:它在于从外部线程访问适当的对象。
标签: java multithreading swing sockets