双击Jar文件无法启动,但从命令行可以启动

4
我是使用IntelliJ创建JAR文件的,当我在命令行运行它时,它能够正常执行,但是双击它时却没有任何反应。从Eclipse导出的JAR文件可以正常工作,由于我是一个使用IntelliJ的初学者,我的猜想是我做错了一些事情。
我是按照以下方式导出JAR文件的:
Project structure -> jar -> from modules and dependencies then use this 
    configuration to build.

双击JAR文件是什么意思?JAR文件不是可执行文件,它只是一个包含编译代码的盒子。 - Cesar Villasana
是的,但 Eclipse 可以导出可运行的 JAR 文件,您可以单击它并且它的工作方式与拥有 EXE 文件相同。 - user1126068
你如何从命令行开始它? - Henry
尝试安装JRE,它会正常运行 :) 我也遇到了同样的问题。 - Zohaib Aslam
你能否提供Eclipse和IntelliJ的总目录输出清单?另外,你能通过jar xf file.jar从每个jar文件中提取MANIFEST.MF并提供其内容吗? - bgs
显示剩余3条评论
4个回答

1

不确定为什么大家对自执行的jar文件都装作不知道。

只需添加一个MANIFEST.MF文件,并将完全限定的主类指定为Main-Class:my.package.MyClass即可。

此外,请确保您的.jar文件类型的可执行文件类型是Java。

一旦完成上述步骤,您只需双击jar文件即可执行它。


可能是因为您需要将JAR类型与Java关联起来。 - Victor Grazi
如果这些程序被Eclipse导出,它们能够很好地运行,但是只要被IntelliJ导出,它们就不能正常工作。 - user1126068
打开两个压缩文件(使用像Winzip这样的压缩文件查看器),看看它们之间的区别是什么。 - Victor Grazi
我可以确认它就在那个位置。唯一的区别似乎是IntelliJ在每个文件夹中添加了空的无名称文件夹。删除它们不会改变任何内容。 - user1126068
Java不知道哪个IDE创建了您的jar文件。两个jar文件之间必须有一些不同之处。请检查清单中的拼写、大小写差异、空格、冒号位置。还要检查两者之间的实际目录结构。空文件夹可能无关紧要,但是为了使一切相等,请将它们删除。 - Victor Grazi
显示剩余2条评论

0
Intellij不会为您执行JAR。请记住,JAR是一个容器,就像您要求执行ZIP文件一样。
我确定您想要执行JAR文件中的类。这将是具有以下内容的类:
public static void main(String[] args) { ... }

你有两个选择:
1)从命令行执行jar文件。
2)右键点击我上面写的“main”单词,然后按RUN。你会看到一个小绿箭头(播放按钮)。这是在Intellij中运行类的唯一方法。
希望能帮到你。

我不需要IntelliJ为我执行jar文件,我想知道如何创建可执行的jar文件。 - user1126068
哦,好的。那你是在使用Maven或类似工具吗?如果没有,你可以在这个链接中学习如何构建和创建自己的jar包。希望能对你有所帮助 :) blog.jetbrains.com/idea/2010/08/quickly-create-jar-artifact - Cesar Villasana
我不使用Maven,我的JAR文件可以从命令行正常导出并运行,但与Eclipse生成的JAR文件不同的是,它不能通过双击启动。 - user1126068
当你双击时会发生什么?它会打开并尝试提取文件吗?你是否按照我给你的链接中的说明创建了jar文件? - Cesar Villasana
当我双击时,绝对什么也不会发生,我第一次使用你给我的链接创建了jar文件。 - user1126068

0

如果您的JAR文件可以通过命令行使用jar -jar <file>启动,那么它就像一个可执行的JAR文件一样(换句话说,元数据指定了主类的位置)。如果您希望在双击.jar文件时使用操作系统提供的工具来指定它应该执行java -jar <file>,那么这超出了JAR文件的范围。例如,如果您正在运行Windows,则可以按照此处所述的过程来实现此目的。再次强调,这是特定于操作系统甚至可能是特定于您正在运行的版本的,并且本质上只是一个围绕双击事件执行java -jar命令的花哨包装。


Eclipse是如何做到的?使用Eclipse导出的同一项目在双击时可以正常工作... - user1126068
对于任何给定的软件来说,特别是覆盖双击所做的操作非常容易。它只需要在后台静默运行 java -jar <file> 即可。从你提出问题的方式来看,我认为你想让双击在任何地方都能起作用,而不仅仅是在 IntelliJ 中。我所知道的唯一在 IntelliJ 中可用的方法是定义一个外部工具(据我所知,它不会像双击那样工作,但它将出现在文件的右键菜单中)。 - Vala

0

确保为该jar文件设置了x标志。

java -jar xyz.jar

不需要那个,但双击需要它:

ls -l xyz.jar
chmod 755 xyz.jar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接