我创建了一个bat文件来调用java类。现在我已经创建了一个GUI。在那个摇摆中,我有一个按钮作为开始,为此我有动作监听器,我在其中创建了以下代码
public void actionPerformed(java.awt.event.ActionEvent evt)
{
try
{
File file = new File("F:/myprog/start.bat");
Desktop.getDesktop().open(file);
} catch (IOException e)
{
e.printStackTrace();
}
jButton1ActionPerformed(evt);
}
当我跑步时点击按钮,我得到“Error: Could not find or load main class
”
批处理文件:
javac *.java
java websphinx.workbench.Workbench
pause
当我单击bat文件时,应用程序正在运行。但是当我调用这个bat文件时,我从Java程序中得到错误。出了什么问题?
答案 0 :(得分:2)
intself中的批处理文件不是可执行文件,并且在其解释器中正常运行,因此您需要使用cmd.exe启动它
尝试以下
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "F:\\myprog\\start.bat");
Process p = pb.start();
另一种选择是:
Runtime.getRuntime().exec("cmd /c start F:/myprog/start.bat");
但是,Processbuilder是首选替代方案。它使您可以更好地控制外部进程,因为您可以指示程序等待批处理文件完成其执行或与其并发运行。
答案 1 :(得分:2)
在Java中,通常在Runtime.getRuntime()。exec下运行命令,您需要将cmd.exe作为要运行的文件传递,然后将批处理名称作为参数传递。
try {
Process p = Runtime.getRuntime().exec(
new String[]{"cmd.exe", "/c", "F:/myprog/start.bat"});
InputStream in = p.getInputStream();
OutputStream out = p.outputStream();
} catch (IOException e){
e.printStackTrace();
}
答案 2 :(得分:1)
试试这个
Runtime.getRuntime().exec("cmd /c start F:/myprog/start.bat");
答案 3 :(得分:1)
我认为它不是批处理文件问题,
查看Error: Could not find or load main class
它看起来像是一个类路径问题
您可能需要改进批处理文件
javac *.java
java -cp yourdrive:\path\to\class websphinx.workbench.Workbench
pause
请参阅-cp
变量。
当你执行批处理文件时,它运行时以及从程序中提供异常时,可能是因为范围的变化。您的java类和批处理文件可能不在同一个位置。
答案 4 :(得分:0)
您可以使用Runtime#exec
方法:
Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", "F:\\myprog\\start.bat" });
请注意,您实际运行的程序是cmd.exe
,/c
开关,后面是带有Windows格式路径的批处理文件名。