Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从可执行Jar运行外部程序_Java_Swing_Intellij Idea_Jar - Fatal编程技术网

Java 从可执行Jar运行外部程序

Java 从可执行Jar运行外部程序,java,swing,intellij-idea,jar,Java,Swing,Intellij Idea,Jar,我为别人开发的cmd程序创建了一个简单的SWING gui。要运行此程序,请执行以下命令: Process convertProcess = Runtime.getRuntime().exec("jlyt\\prog\\com_win\\jlyt.bat " + selectedFiles.getName()); jlyt文件夹与我的src文件夹位于同一文件夹中(我正在使用IntelliJ)。 当通过IDE运行时,一切都很好,但当我运行我创建的jar时就不行了。我试着从IntelliJ保存到的

我为别人开发的cmd程序创建了一个简单的SWING gui。要运行此程序,请执行以下命令:

Process convertProcess = Runtime.getRuntime().exec("jlyt\\prog\\com_win\\jlyt.bat " + selectedFiles.getName());
jlyt
文件夹与我的
src
文件夹位于同一文件夹中(我正在使用IntelliJ)。 当通过IDE运行时,一切都很好,但当我运行我创建的jar时就不行了。我试着从IntelliJ保存到的目录以及
jlyt
文件夹的目录运行它。 我没有将外部程序(在
jlyt
文件夹中)添加到我的jar中,因为它非常重。我希望我的jar能够与原始程序一起分发,而不是包含所有内容

你知道我该怎么做我的罐子吗


谢谢。

您必须根据jar文件使用基于jlyt.bat所在位置的相对路径


e、 g.使用“/”或“./”向上导航目录树。

您必须根据jar文件使用基于jlyt.bat所在位置的相对路径


e、 g.使用“/”或“./”导航目录树。

我明白为什么要将/jlyt放在/src中,它在IDE中起到了方便的作用/jlyt将作为一个资源复制到/bin/classes或任何IDE目标中,这允许一切都从IDE中工作

在JAR应用程序时,/jlyt通常被添加到JAR中;但是,Windows无法访问它。我假设您在尝试运行时将/jlyt的副本放在与JAR相同的文件夹中

作为第一步,在终端中,将当前目录设置为包含JAR和/jlyt的文件夹。因为您在exec()中指定了一个相对路径,所以这应该足以让一切运行


您还可以尝试创建JAR的快捷方式,因为它是可执行的,并将工作目录设置为包含JAR的文件夹。

我明白为什么要将/jlyt放在/src中,它在IDE中起到了方便的作用/jlyt将作为一个资源复制到/bin/classes或任何IDE目标中,这允许一切都从IDE中工作

在JAR应用程序时,/jlyt通常被添加到JAR中;但是,Windows无法访问它。我假设您在尝试运行时将/jlyt的副本放在与JAR相同的文件夹中

作为第一步,在终端中,将当前目录设置为包含JAR和/jlyt的文件夹。因为您在exec()中指定了一个相对路径,所以这应该足以让一切运行


您还可以尝试创建JAR的快捷方式,因为它是可执行的,并将工作目录设置为包含JAR的文件夹。

JAR文件的位置仅与启动JAR相关。工作目录必须是包含
jlyt
文件夹的目录,因为您使用“jlyt\…”作为可执行文件的路径

例如,让我们假设以下目录结构:

工作目录必须是“project”,然后JAR将被引用为“gui\appl.JAR”

C:\somewhere> cd project
C:\somewhere\project> java -jar gui\appl.jar
在退出应用程序/java之前,请确保等待转换进程终止(例如,
convertProcess.waitFor()
),我相信,当java虚拟机关闭时,任何正在运行的外部进程都会被终止

流程文档中的提示:

从1.5开始,ProcessBuilder.start()是创建流程的首选方法


JAR文件的位置仅与启动JAR相关。工作目录必须是包含
jlyt
文件夹的目录,因为您使用“jlyt\…”作为可执行文件的路径

例如,让我们假设以下目录结构:

工作目录必须是“project”,然后JAR将被引用为“gui\appl.JAR”

C:\somewhere> cd project
C:\somewhere\project> java -jar gui\appl.jar
在退出应用程序/java之前,请确保等待转换进程终止(例如,
convertProcess.waitFor()
),我相信,当java虚拟机关闭时,任何正在运行的外部进程都会被终止

流程文档中的提示:

从1.5开始,ProcessBuilder.start()是创建流程的首选方法


如果我遵循您的示例,那么appl.jar实际上与jlyt目录处于同一级别,这意味着它们都在项目下。这仍然不起作用。也许我需要编辑jlyt的相对路径,bat?但是缺少什么呢?@exigez在我的示例中,appl.jar位于“project*\gui*”下,也就是说,位于“project”下的“gui”下。。。注意缩进,还要注意cmd
java-jargui\appl.jar
它显然必须在gui下如果我按照你的例子,那么appl.jar实际上与jlyt目录处于同一级别,这意味着它们都在project下。这仍然不起作用。也许我需要编辑jlyt的相对路径,bat?但是缺少什么呢?@exigez在我的示例中,appl.jar位于“project*\gui*”下,也就是说,位于“project”下的“gui”下。。。注意缩进,还要注意cmd
java-jargui\appl.jar
它显然必须在gui下,我没有特别将/jlyt放在/src下,因为我不想将它添加到jar中。文件夹/jlyt与/src处于同一级别,我想使用jar中指向它的相对路径。实际上,我在创建jarOK时排除了/jlyt。那么我所说的其余部分应该适用。主要的一点是设置当前目录,我没有特别将/jlyt放在/src下,因为我不想将它添加到jar中。文件夹/jlyt与/src处于同一级别,我想使用jar中指向它的相对路径。实际上,我在创建jarOK时排除了/jlyt。那么我所说的其余部分应该适用。重点是设置当前目录。