我正在使用套接字的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。但我懷疑你的問題在於切換線程:它正在從外部線程訪問適當的對象。 –