Java线程问题

时间:2010-03-17 14:49:21

标签: java multithreading

我遇到了java线程的问题:

public class MyClass{

 public void Core(){
  runTools(); //here I would like to call runTools() method
 }

 public void runTools(){

  final String run_tool ="cmd.exe /C sources.exe";

  Runnable doRun = new Runnable() {
   public void run() {
    try {
     Process tool_proc = Runtime.getRuntime().exec(run_tool);
     } 
    catch (IOException e) {
     e.printStackTrace();
    }
   }
  }; 
  Thread th = new Thread(doRun);
  th.start();

 }
}

如果我这样做,那么我不知道为什么,但线程不起作用。请给我一些创建线程的想法。我已经看过很多例子,但我应该在这里使用一些代码,例如我的例子。谢谢!

2 个答案:

答案 0 :(得分:1)

首先,如果你只想执行一个外部命令并且不打扰它的输出 *,那么使用专用线程是不必要的,因为进程本身已经和你的并行运行了应用程序,因此exec()调用不会真正挂起您的程序。

然而,你的代码对我来说是正确的。您应该检查应用程序的工作目录(可能cmd.exe找不到您的sources.exe)并通过引导tool_proc.getErrorStream()和{{1的流来评估您启动的流程给您的输出转到tool_proc.getInputStream()或记录它们。

修改: * Java documentation表示你总是应该读取进程的System.out,因为没有这样做可能会导致填满系统缓冲区,这最终会导致进程停止。

答案 1 :(得分:0)

问题1您为Runnable Interface创建了对象,这是永远不可能的。

Runnable * obj = new Runnable(); //这不正确

问题2在另一个方法runTools()

中编写Run()方法的定义

我们可以为实现Runnable接口的类创建对象。

由于这些代码无效。

尝试以此方式

public class MyClassName1 implements Runnable
{
  public void start()
  {
    //here you can call your method:runTools()

      runTool();

  }
}
public void runTools()
{

final String run_tool ="cmd.exe /C sources.exe";
    try 
    {
     Process tool_proc = Runtime.getRuntime().exec(run_tool);
    } 
    catch (IOException e) 
    {
     e.printStackTrace();
    }
}

这是我的主要课程

public class MyClassName2 
{
  public static void main(String[] ars)
  {
    Runnable *obj1=new MyClassName1();
     Thread t=new Thread(obj);
     t.start()
  }

我希望这会对你有所帮助