【问题标题】:Execute the command julia.exe in Java在 Java 中执行命令 julia.exe
【发布时间】:2016-02-29 14:07:03
【问题描述】:

我正在尝试用 Java 执行 julia.exe

代码如下:

Process pTest = Runtime.getRuntime().exec("C:/Program Files/Julia-0.4.1/bin/julia.exe");

当我运行它时,什么也没有发生。

但是,如果我尝试另一个可执行文件,它运行良好。例如:

Process pTest = Runtime.getRuntime().exec("C:/Program Files/anotherProgram/program.exe");

program.exe 将按预期运行。

julia.exe 有点特别。
如果我在命令提示符下运行它,它将在命令提示符下执行。也就是说,它不会弹出自己的窗口。

我做了一个测试:

#julia script, it's path: C:/Users/Thomas/Julia/test.jl
function test1()
  println("it's test1")
end

test1()

我在命令提示符下执行这个命令:

C:\>C:/Program Files/Julia-0.4.1/bin/julia.exe C:/Users/Thomas/Julia/test.jl

然后我会在命令提示符下得到it's test1

我需要在我的java项目中执行C:/Program Files/Julia-0.4.1/bin/julia.exe C:/Users/Thomas/Julia/test.jl,并在eclipse的控制台上得到it's test1

这是我的 java 项目:

public class Main {
    public static void main(String[] args){
        try {

        String[] params = {"C:/Program Files/Julia-0.4.1/bin/julia.exe", "C:/Users/Thomas/Julia/test.jl"};

        Process pTest = Runtime.getRuntime().exec(params);
        try {
            if (pTest.waitFor() != 0) {
                System.err.println("exit value = " + pTest.exitValue());
            }
            BufferedReader in = new BufferedReader(new InputStreamReader(pTest.getInputStream()));
            StringBuffer stringBuffer = new StringBuffer();
            String line = null;
            while ((line = in.readLine()) != null) {
                stringBuffer.append(line+"-");
            }
            System.out.println(stringBuffer.toString());
        } catch (InterruptedException e) {
            System.err.println(e);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

【问题讨论】:

  • 在命令提示符下运行是否有效?
  • 1.程序应该做什么? 2. 您是否适当地处理流程的流?
  • 您对可执行文件的位置有管理员权限吗?
  • 当“什么都没有发生”时,实际上没有发生的事情就是失败。所以有些东西在起作用,否则你会得到一个错误。问题变成了:你期望发生什么?如果你认为调用 exec() 会像那样产生控制台输出,那你就错了。
  • 两件事:1:你.waitFor() julia 进程完成...... 之前 你开始并捕获输出......?! 2:我不明白为什么你在System.out.println 之前缓冲 julia 的输出 - 你可以“随时打印”。还等待完整的行可能会阻塞?

标签: java exec julia


【解决方案1】:

考虑这个改变(和工作)的实现,删除了对waitForexitValue 的过早调用:

public class Main {
  public static void main(String[] args) {
    try {

        String[] params = {"C:/Program Files/Julia-0.4.1/bin/julia.exe", 
              "C:/Users/Thomas/Julia/test.jl"};

        Process pTest = Runtime.getRuntime().exec(params);
        BufferedReader in = new BufferedReader(new InputStreamReader(pTest.getInputStream()));
        String line = null;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
        System.out.println("===");
        System.out.println("Julia exit value = " + pTest.exitValue());

    } catch (IOException e) {
        e.printStackTrace();
    }
  }
}

这使用您的测试脚本产生了以下输出:

it's test1
===
Julia exit value = 0

【讨论】:

    【解决方案2】:

    我终于明白了。

    由于julia.exe立即在命令提示符下执行,我们必须给cmd.exe的用户管理员权限。

    【讨论】:

      猜你喜欢
      • 2017-01-26
      • 1970-01-01
      • 2012-10-09
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多