Java 从可执行Jar运行外部程序
我为别人开发的cmd程序创建了一个简单的SWING gui。要运行此程序,请执行以下命令: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保存到的
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”下。。。注意缩进,还要注意cmdjava-jargui\appl.jar
它显然必须在gui下,我没有特别将/jlyt放在/src下,因为我不想将它添加到jar中。文件夹/jlyt与/src处于同一级别,我想使用jar中指向它的相对路径。实际上,我在创建jarOK时排除了/jlyt。那么我所说的其余部分应该适用。主要的一点是设置当前目录,我没有特别将/jlyt放在/src下,因为我不想将它添加到jar中。文件夹/jlyt与/src处于同一级别,我想使用jar中指向它的相对路径。实际上,我在创建jarOK时排除了/jlyt。那么我所说的其余部分应该适用。重点是设置当前目录。