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