问个高难问题,看有人能解决不(线程)
有如下四个类:
/*=====主程序Call==========*/
public class Call{
public static void main(String args[]){
new Call();
}
public Call(){
A a=new A();
a.callB();
System.out.println("return message is "+a.getMessage());
}
}
/*=======类A,完成调用耗时操作和显示等待窗口============*/
public class A{
String message;
public A(){
}
public void callB(){
B b=new B(this);
b.start();
C c=new C(b);
c.start();
}
public String getMessage(){
return message;
}
public void setMessage(String message){
this.message=message;
}
}
/*==============类B ,显示等待窗口==================*/
import javax.swing.*;
public class C extends Thread{
JFrame dialog;
B b;
public C(B b){
this.b=b;
init();
}
public void init(){
dialog=new JFrame("提示");
dialog.getContentPane().add(new JLabel("正在执行....."));
dialog.setBounds(400,400,200,50);
dialog.show();
}
public void run(){
try{
b.join();
}
catch(Exception e){
}
dialog.dispose();
}
}
/*=========== 类C,进行耗时操作=============*/
public class B extends Thread{
A a;
public B(A a){
this.a=a;
}
public void run(){
for (int i=0;i<=100000;i++){
for(int j=0;j<=100000;j++){
}
}
a.setMessage("Finished");
}
}
现在运行程序Call,得到的结果是显示了窗口B,但是返回的message确是空值.
可是我想要的结果是让他得到"Finished",因为我还想对这个Finished进行处理。
该如何做?说明,有一种解决方案是把Call做成线程,让这个线程监视耗时类C,等待C完成后在进行处理
可是我不想这样做。因为我有很多和Call一样的程序,那样我要把每一个类似Call的程序都要改动。
我的想法是在A中处理。让A来监视C,等到C完成后在返回Call继续执行,在C执行的同时还要显示B,能做到吗?