Java子线程如何返回一个得到结果的字符串给主线程呢?
做的一个socket聊天室程序,然后子线程从服务器获取到了字符串后,想从子线程返回主线程显示在面板上,但是,我试了在子线程加get方法,结果返回的是null,也试了在主线程中判断为空就让主线程睡眠一段时间,但这个方法在第一次有效,第二次再调用就又有返回null了
这是主线程的代码:
SocketThread_in sk = new SocketThread_in(socket);
Thread tt = new Thread(sk);
tt.start();
if(sk.getstr() == null){
try {
Thread.sleep(300);
textArea_mess.append(sk.getstr()+"\n");
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
textArea_send.setText("");
}
这是子线程的代码:
public class SocketThread_in implements Runnable {
public Socket socket;
public volatile String str;
public SocketThread_in(Socket socket){
this.socket = socket;
}
@Override
public void run(){
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true){
str = br.readLine()+"赋值成功";
System.out.println(str+"这里运行了");
}
}catch(Exception e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getstr(){
return str;
}
}
然后子线程那句测试输出的代码每次都能正确输出str得到的字符串,但是就是返回的时候就是null,请问这是怎么回事呢?
这是主线程的代码:
SocketThread_in sk = new SocketThread_in(socket);
Thread tt = new Thread(sk);
tt.start();
if(sk.getstr() == null){
try {
Thread.sleep(300);
textArea_mess.append(sk.getstr()+"\n");
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
textArea_send.setText("");
}
这是子线程的代码:
public class SocketThread_in implements Runnable {
public Socket socket;
public volatile String str;
public SocketThread_in(Socket socket){
this.socket = socket;
}
@Override
public void run(){
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true){
str = br.readLine()+"赋值成功";
System.out.println(str+"这里运行了");
}
}catch(Exception e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getstr(){
return str;
}
}
然后子线程那句测试输出的代码每次都能正确输出str得到的字符串,但是就是返回的时候就是null,请问这是怎么回事呢?
...全文


Eclipse
