class target
{
   StringBuffer sb
   class thread
   {
       run()
       {
        process.exec("......");
        sb.append("......");
        }
        public String f()
        {
           return sb.tostring();
         }
    }
    public String f()
   {
      (new thread()).f();
   }
}
public class
{
   main()
   {
      process.exec()
      {
          print( (new target()).f() );
      }
    }
}
运行之后,发现sb没带出接过来。
请高手指点一下。

解决方案 »

  1.   

    1. 代码中没有看到启动线程的xx.start()方法,你sb.append(...)根本还没有执行.
    2. 即使启动了线程,在main进程里也要等xx.run()执行完,才能取到值。必须加join.
      

  2.   

    先谢谢有人看这帖子。hellking(信息孤岛)说没有start();。。  我当然知道要start();
    我写的是个程序框架,只求能看清程序意图就可以。另外,process.exec("......");是调系统进程的意思,现在你明白我的意图了吧?davidafairy() 说用随时返回,那东西对我没什么用,我只关心最后的结果,至于中间发生过什么,有些是不受我控制的。我希望表达清楚我的意思,谢谢大家,再帮帮忙!!
      

  3.   

    你的f()方法在start()之前执行了
    不对
    也就是说 return sb.toString();的时候start()的方法可能还没有执行,这样的话当然没有内容
    建议楼主好好理解一下线程执行的机制
      

  4.   

    没办法,又有一个人说我不懂线程。我忘了说一点:在内部类  class thread 构造时 (){ start(); },好了请不要有人再说没有start();之类的话了,多看清楚一点,主要是了解意图,不要死扣有没有start();,希望有高人指点一下。
      

  5.   

    這樣應該可以滿足LZ的要求:
    class Target extends Thread
    {
    private StringBuffer sb; public Target()
    {
    sb = new StringBuffer();
    start();
    }
    public void run()
    {
    sb.append("...sssss...");
    } public StringBuffer f()
    {
    return sb;
    }}public class TargetTest
    {
    public static void main(String[] args)
    {
    Target target = new Target();
    try
    {
    Thread.sleep(100);
    } catch (InterruptedException e)
    {
    e.printStackTrace();
    }
    System.out.println(target.f().toString());
    }
    }
      

  6.   

    import java.util.concurrent.*;public class Test {
    private StringBuffer sb=null;
        public Test(StringBuffer sb) {
         this.sb=sb;
        }
        class Target implements Callable<StringBuffer>{
    public StringBuffer call(){
    sb.append("append");
    return sb;
    }

    }
    public static void main (String[] args) {
    StringBuffer sb=new StringBuffer("StringBuffer");
    Test t=new Test(sb);
    Test.Target tt=t.new Target();
    FutureTask<StringBuffer> f=new FutureTask<StringBuffer>(tt);
    new Thread(f).start();
    StringBuffer sb1=null;
    try{
    sb1=f.get();
    }catch(ExecutionException ee){
    ee.printStackTrace();
    }catch(InterruptedException ie){
    ie.printStackTrace();
    }

    System.out.println (sb1);
        }
    }
    用callable接口
      

  7.   

    关于1.5的新特性,我写个东西测试一下,如果可行的话就给huojicq 和 davidafairy 每人20分