如何从java程序调用bat

如何从java程序调用bat,java,swing,batch-file,Java,Swing,Batch File,我创建了一个bat文件来调用java类。现在我已经在swing中创建了一个GUI。在这个swing中,我有一个按钮作为开始,为此我有一个ActionListener,我在其中创建了以下代码 public void actionPerformed(java.awt.event.ActionEvent evt) { try { File file = new File("F:/myprog/start.bat"); Desktop.getDesk

我创建了一个bat文件来调用java类。现在我已经在swing中创建了一个GUI。在这个swing中,我有一个按钮作为开始,为此我有一个ActionListener,我在其中创建了以下代码

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);

}
当我运行时,单击按钮我得到“
错误:无法找到或加载主类”

批处理文件:

javac *.java
java websphinx.workbench.Workbench
 pause
当我单击bat文件时,应用程序正在运行。但是从Java程序中,当我调用这个bat文件时,我得到了错误。出了什么问题?

您使用以下方法:

Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", "F:\\myprog\\start.bat" });
请注意,您真正运行的程序是
cmd.exe
,带有
/c
开关,后跟批处理文件名,路径为Windows格式。

请尝试此操作

Runtime.getRuntime().exec("cmd /c start F:/myprog/start.bat");

我认为这不是批处理文件的问题

查看
错误:无法找到或加载主类

这看起来像是一个类路径问题

您可能需要改进批处理文件

javac *.java
java -cp yourdrive:\path\to\class websphinx.workbench.Workbench
 pause
请参阅
-cp
变量


当您按原样执行批处理文件并从程序中发出异常时,可能是因为范围的更改。可以说,java类和批处理文件可能不在同一位置。

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是首选的替代方案。它为您提供了对外部进程的更多控制,因为您可以指示程序等待批处理文件完成其执行或与之并行运行。

在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();
}

您可以使用:Runtime.getRuntime().exec('Path to bat')@Alex BAT文件javac*.java java websphinx.workbench.workbench暂停当BAT文件正在执行时,其中的内容会引发错误。“websphinx.workbench.workbench pause”是主类吗?调用bat?执行此操作:@MukulGoel Workbench是主类,当我单击bat文件时,应用程序运行时没有任何问题。请参阅关于此问题的op评论。这不是真正的问题。@MukulGoel:很可能。我读了问题和评论,现在我不知道OP在问什么。是的,这里也是。他不确定自己在问什么。他正在做的是,有一个按钮,他点击该按钮调用一个批处理,该批处理首先编译当前目录中的所有文件,然后调用
pause
class。现在,此语句抛出错误:
错误:无法找到或加载主类
。我认为就是这样,这不是一个无法运行的批处理error@MukulGoel嘿,我有一份申请表。我曾经从cmd运行应用程序。为了避免这种情况,我创建了一个批处理文件来运行应用程序。为了给更多的用户提供GUI,我创建了swing,其中包含一些按钮。当我单击其中一个按钮时,我必须运行调用应用程序的批处理文件。就是这个……是的。java类和批处理文件位于不同的文件夹中。但我也检查了将bat文件保存在类文件文件夹中并从GUI程序调用,但错误仍然存在。@Murali:其他答案有帮助吗?改变批处理的调用方式?@Murali:你能用你的项目结构更新你的问题吗?调用java的位置..批处理的位置以及工作台的位置.java?F:\project\data\collect-批处理文件的路径
F:\project\data\collect\websphinx\Workbench-类的路径file@Murali:问题左下角有一个编辑按钮。编辑它并更新帖子。这里不可读。我也不想在这里读