0

我想首先说我不是程序员,并且只有基础知识。我正在使用一些 Java 代码自动化用 FORTRAN 编写的模型。我想使用 Java,因此我可以将我的自动化与另一个用 Java 编程的小组执行的一些工作联系起来。一段时间以来,我一直在阅读有关 stackoverflow 的帖子,但无法让我的程序正常工作。我见过有人提到同时使用这两种方法:

Process p = Runtime.getRuntime().exec(cmd);

Process p = new ProcessBuilder(cmd).start(); 

使用 Java 运行可执行文件(参见下面的代码)。当我运行 Java 程序时,我没有收到任何错误;但是,该模型尚未运行。在文件夹中双击它时运行良好,但在 Java 中运行不正常。我还尝试了一些简单的方法,启动了一个 Web 浏览器,使用任何一种方法都可以正常工作。有没有人有什么建议?谢谢您的帮助。

public class Test {

    public static void main(String[] args) throws Exception {
        String[] cmd={"C:\\TxtInOut\\rev591_64rel"};
   //     Process p = Runtime.getRuntime().exec(cmd);
        Process p = new ProcessBuilder(cmd).start();
        p.waitFor();
      }
}  

我正在尝试自动化主要是水文模型的 SWAT 模型。我过去曾尝试使用文件扩展名(.exe),但没有任何区别。运行 Reimeus 建议的代码时,我得到以下信息。(见下面我的代码)。

run:
forrtl: severe (24): end-of-file during read, unit 23, file C:\Users\Rachel\Documents\NetBeansProjects\Java21\file.cio

Image              PC                Routine            Line        Source             
rev591_64rel.exe   000007F7C1B28D7F  Unknown               Unknown  Unknown
rev591_64rel.exe   000007F7C1B24663  Unknown               Unknown  Unknown
rev591_64rel.exe   000007F7C1ABDF8F  Unknown               Unknown  Unknown
rev591_64rel.exe   000007F7C1AA4E68  Unknown               Unknown  Unknown
rev591_64rel.exe   000007F7C1AA3AA2  Unknown               Unknown  Unknown
rev591_64rel.exe   000007F7C1A776BD  Unknown               Unknown  Unknown
rev591_64rel.exe   000007F7C1949C26  Unknown               Unknown  Unknown
rev591_64rel.exe   000007F7C18B1BF7  Unknown               Unknown  Unknown
rev591_64rel.exe   000007F7C1B2C09C  Unknown               Unknown  Unknown
rev591_64rel.exe   000007F7C1AEF4D2  Unknown               Unknown  Unknown
rev591_64rel.exe   000007F7C1AEF3DE  Unknown               Unknown  Unknown
KERNEL32.DLL       000007FFD58D1832  Unknown               Unknown  Unknown
ntdll.dll          000007FFD81FD609  Unknown               Unknown  Unknown
BUILD SUCCESSFUL (total time: 0 seconds)

file.cio 是我尝试运行的模型的初始输入文件。还有许多其他输入文件在整个程序中被调用。我目前将所有模型输入文件与手动启动模型时工作的 SWAT 可执行文件放在同一文件夹中。通过Java启动时我需要做一些不同的事情吗?

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {

    public static void main(String[] args) throws Exception{
        String[] cmd={"C:\\TxtInOut\\rev591_64rel.exe"};
   //     Process p = Runtime.getRuntime().exec(cmd);
        Process p = new ProcessBuilder(cmd).start();
   //     p.waitFor();

    try (BufferedReader errorStream = new BufferedReader(new InputStreamReader(p.getErrorStream()))) {

    String line;
    while ((line = errorStream.readLine()) != null) {
        System.out.println(line);
    }

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

    }
}
}
4

1 回答 1

0

C:\\TxtInOut\\rev591_64rel看起来不像 Windows 可执行文件(例如.exe.lnk) - 它缺少文件扩展名。对于上述两个扩展,添加扩展并检查ErrorStream以查看显示的错误Process p

Process p = new ProcessBuilder("C:\\TxtInOut\\rev591_64rel.lnk").start();

try (BufferedReader errorStream = 
        new BufferedReader(new InputStreamReader(p.getErrorStream()))) {

    String line;
    while ((line = errorStream.readLine()) != null) {
        System.out.println(line);
    }

} catch (IOException e) {
    e.printStackTrace();
}
于 2013-09-06T01:39:03.020 回答