【问题标题】:process does not run when executing Java [duplicate]执行Java时进程不运行[重复]
【发布时间】:2019-02-26 18:20:21
【问题描述】:

我正在尝试在 java 中运行一个 .class 文件。这是我尝试过的:

Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("cd target/classes/; java -cp ./ SoundHandler Correct; cd ../../");

我做了一些谷歌搜索,我能想到的最好的办法就是把它写到最后:

pr.getInputStream();
pr.getErrorStream();
pr.getOutputStream();

这没有帮助。我想在java中运行一个.class文件。谢谢!

【问题讨论】:

  • 有什么问题?一点都不清楚。
  • 当我从 java 内部执行命令时,.class 文件似乎没有运行。
  • 你怎么能这么说?
  • 它不播放声音或打印“这是一个测试”(用于调试)。我知道该命令不会运行,因为它不会播放我在参数中提供的声音。当我从同一目录中的终端运行命令时,命令或 SoundHandler 类本身不会引发任何错误。
  • 这个问题不是骗人的。我只是 cd 到 .class 文件所在的位置。

标签: java process command exec


【解决方案1】:

您正在向运行时提供三个命令以执行 - 但只有一个参数。它试图将其作为一个命令执行 - 但是这样的命令不存在。

如果命令由多个元素(命令和参数)组成,它们应该作为字符串数组传递,以便运行时可以区分它们。如果您使用的是 shell 命令(如 cd),则该命令应作为参数传递给 shell。

试试这样的:

//if you are using unix-like OS. For Windows change sh -c to cmd /k
String[] cmd = new String[] {"sh", "-c", "cd target/classes/ && java -cp ./ SoundHandler Correct"};
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(cmd)

为了调试进程,您可以通过以下方式读取命令的输出:

InputStream is = pr.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

String line;
while ((line = br.readLine()) != null){
    System.out.println("MSG: " + line);
}

一些聊天对话后的一些更新:主要想法是可行的,但类路径需要一些调查。

【讨论】:

  • 你得到的错误/输出是什么?
  • 无。它只是继续主 .class 文件。
  • 进程的输入流中一定有东西。
  • 我试过pr.getOutputStreampr.getErrorStream,但没有任何改变
  • 显然不是,仍然没有聊天链接。
猜你喜欢
  • 1970-01-01
  • 2011-04-07
  • 2012-06-28
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
相关资源
最近更新 更多