Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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中运行jar的问题-IllegalArgumentException_Java_Jar_Executable Jar - Fatal编程技术网

Java 在jar中运行jar的问题-IllegalArgumentException

Java 在jar中运行jar的问题-IllegalArgumentException,java,jar,executable-jar,Java,Jar,Executable Jar,jar文件Test1中包含jar文件Test2,我执行Test1。当我尝试使用java.awt.Desktop执行Test2时,我得到了java.lang.IllegalArgumentException:URI不是层次异常和消息。当我将Test2与Test1分开时,即在不同的文件夹中放置Test2并按如下方式访问它时,我可以成功地完成此操作: Desktop.getDesktop().open(new File("path-to-file\\Test2.jar")); 我可以在IDE中毫无问

jar文件Test1中包含jar文件Test2,我执行Test1。当我尝试使用java.awt.Desktop执行Test2时,我得到了java.lang.IllegalArgumentException:URI不是层次异常和消息。当我将Test2与Test1分开时,即在不同的文件夹中放置Test2并按如下方式访问它时,我可以成功地完成此操作:

Desktop.getDesktop().open(new File("path-to-file\\Test2.jar"));
我可以在IDE中毫无问题地执行以下操作:

Desktop.getDesktop().open(new File(Test.class.getResource("Test2.jar").toURI()));
使用上述代码行运行jar文件Test1时,运行Test2时遇到问题

通过研究,我了解到你必须做类似的事情。然而,我不明白的是,如果有什么的话,您必须使用这个InputStream才能从jar中成功地执行jar,或者这个InputStream做了什么才能使URI分层。到目前为止,我还不知道我的第一个文件是否正确:

InputStream is = Test.class.getClassLoader().getResourceAsStream("Test2.jar");
Desktop.getDesktop().open(new File(Test.class.getResource("Test2.jar").toURI()));

有人能解释一下吗?

a好吧,你不能在一个罐子里执行一个罐子,你为什么要这样做?简单地说,我把这个项目最初创建到一个罐子里,我对它进行了修改,我把新版本也制作到了一个罐子里,我想让用户可以通过编程方式运行旧jar文件来选择使用以前的版本。jar似乎在您的项目文件夹中,但它是否打包到最终的jar中?@user2924010您的意思是与所有其他类和清单文件打包在一起吗?如果是的话,是的。我的意思是把这个罐子放进另一个罐子里。罐子是拉链。所以,如果你把lib.jar放到final.jar中,也许它会起作用。