public void callB(){
B b=new B(this);
b.start();
C c=new C(b);
c.start();
                  
//加上b.join()或者c.join(),让主线程等待相应的子线程结束
                  try {
c.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

解决方案 »

  1.   

    可以设定一个锁,当Call运行时等待这个锁的唤醒,而这个锁的唤醒则在C中执行完B后,代码如下:
      

  2.   

    package topic.j3199.j3199199;
    public class Call{
    public static void main(String args[]){
    new Call();
    }
    public Call(){
    A a=new A(this);
    synchronized(this){
    a.callB();
    try {
    wait();
    System.out.println("call");
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
                    
    System.out.println("return message is "+a.getMessage());

    }
    }
      

  3.   

    package topic.j3199.j3199199;public class A{
    String message;
    Call call=null;
    public A(Call call){
    this.call=call;
    }
    public void callB(){
    System.out.println("callB()");
    B b=new B(this);
    b.start();
    C c=new C(b,call);
    c.start();
    }
    public String getMessage(){
    return message;
    }
    public void setMessage(String message){
    this.message=message;
    }}
      

  4.   

    呵呵,我一看到类名有A,B,C,D之类的字母简写我就晕~
      

  5.   

    试验过了,按照上面两位的方法都可以。可是现在的问题是当我的Call是一个窗口上面有一个按钮时,那么在执行这个程序,显示的等待窗口就是灰色的,是不是和界面的刷新有关系?
      

  6.   

    先把这贴借了, shangqiao(伤桥) 和 xu_yun(努力争钱买车) 请到http://community.csdn.net/Expert/topic/3199/3199694.xml?temp=.3472864帮看看这贴。