我想首先说我不是程序员而且只有基础知识。我正在使用一些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();
}
}
}
答案 0 :(得分: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();
}