你可以做一个Notify接口,在该接口方法中对结果作处理。然后你的主线程实现该接口,并在子线程构造的时候传递给他,当子线程做完运算后调用该方法就可以了。注意该方法需要同步,如果你又多个子线程。public interface Notify{
  public void perform(result);
}public class MainThread implements Notify{
 public synchronized void perform(result){
   System.out.print(result);
 }  public void doCal(){
  new SubThread(this).start();
 }
}public class SubThread extends Thread{
 private Notify notify;
 public SubThread(Notify notify){
   this.notify = notify;
 } public void run(){
   .....
   notify.perform(result);
 }
}

解决方案 »

  1.   

    你的问题还是不清楚.
    在主线程必须要子线程的值的时候,...                     //主线程的代码
    subthread.join();       //等待子线程执行完毕
    ...                     //好了,此时应可以取得运算结果了
      

  2.   

    插一嘴,如果是想将网页上applet的运算结果传给网页里的某段script代码段,又该怎样做呢?
      

  3.   

    调用thread.join()会马上返回的。也就是延迟时间很短。
      

  4.   

    用socket。主线程监听,子线程得到结果后发消息给主线程。socket在监听消息时不会浪废cpu,对机器的正常运行没太大影响。
      

  5.   

    用socket。主线程监听,子线程得到结果后发消息给主线程。socket在监听消息时不会浪废cpu,对机器的正常运行没太大影响。
      

  6.   

    subthread.join()的方法我试过了,效果还是不好。当子线程的运算时间较常的时候,面板上所有的按钮都不能点了,整个程序都在等待子线程的结束。还是跟死机差不多。
    zdandfw()能否将你的方法说的详细一点。 
    gfzhx(小小) 的方法比较难,我正在看。
      

  7.   

    我的方法类似于Button的事件类型,都是通过接口来完成的。这是一种设计模式。
      

  8.   

    java中没有回调的概念,虽然形式上很像,但本质上有区别的。
      

  9.   

    在主线程中加入下段代码:
    ServerSocket serverSocket = new ServerSocket(监听的端口号);
    Socket socket = serverSocket.accept();
    DataInputStream is = new DataInputStream(socket.getInputStream());
    if(is.readUTF().equals("end")){
        Object result = subthread.result;
    }在子线程中加入下面代码:
     Socket s = new Socket("localhost", port);
     DataOutputStream os = new DataOutputStream(s.getOutputStream());
     os.writeUTF("end");
      

  10.   

    请问你想让程序
    1.必须得到子程序的值的时候,不得到值无法执行
    2.不等待
    的状态下,主程序做什么?join()只是确保计算完成
      

  11.   

    我想在程序的面板上设计一个按钮,当用户企图放弃计算的时候,可以点击此按钮,来杀死子线程,从而放弃计算。
    但是使用join()后,主线程完全停下来等待子线程。如同死机一般,导致我的按钮无法点击。我的意思表达清楚了吧,高手请指点。
      

  12.   

    主程序用一boolean量canceled控制子线程
    在子线程运行过程中检测这个变量,若为true则停止子线程运行.
    子线程运行完毕后,加一调用:...                                              //子线程的运算,若有
                                                     //循环就可用
                                                     //canceled判定结束SwingUtilities.invokeLater(new Runnable(){       //交给事件派发线程,
        public void run()                            //待会调用.
        {
            if (!canceled)
            {
                //运行完毕的处理代码
            }
        }
    });
    }                                              //子线程可以结束了主线程在适当时机将canceled 置为true.
      

  13.   

    主线程应通过标志控制子线程.其他方法都不合理,另子线程运行结束后,加入如下代码:...                            //子线程的运算
    /*下面交给事件派发线程处理结果(将在主线程中运行).*/
    javax.swing.SwingUtilities.invokeLater(new Runnable(){
        public void run()
        {
            if (!canceled)
            {
                //运行处理运算结果的代码
            }
         }
    });
    }                        //子线程结束