我正在使用套接字的Java项目。由于套接字方法是阻塞方法,我不得不制作一个多线程应用程序。多线程返回值
截至目前,我能够从其他应用程序读取传入字节。我把它们写入一个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 Thread。但我怀疑你的问题在于切换线程:它正在从外部线程访问适当的对象。 –