【问题标题】:Jar not starting on double click, but starts from command linejar不是在双击时启动,而是从命令行启动
【发布时间】:2014-12-15 20:06:55
【问题描述】:

我正在使用 IntelliJ 创建 JAR 文件,从命令行运行时它正常执行,但双击它时没有任何反应。我从 eclipse 导出的 JAR 工作正常,由于我是使用 IntelliJ 的初学者,我猜我做错了什么。

我正在以这种方式导出 JAR:

Project structure -> jar -> from modules and dependencies then use this 
    configuration to build.

【问题讨论】:

  • 双击jar是什么意思? jar 文件不是可执行文件,它只是一个包含已编译代码的框。
  • 是的,但是eclipse可以导出可运行的jar,你可以点击它,它的工作方式与拥有一个exe文件一样
  • 如何从命令行启动它?
  • 尝试安装 JRE,它会工作 :) 我遇到了同样的问题
  • 您在 Windows 上?该文件是否具有.jar 扩展名?

标签: java intellij-idea jar


【解决方案1】:

Intellij 不会为您执行 JAR。记住 JAR 是一个容器,就像你要求执行一个 ZIP 文件一样。

我确定你想要的是在你的 jar 文件中执行一个类。哪个类具有:

public static void main(String[] args) { ... }

你有两个选择:

1) 从命令行执行jar

2) 右键单击​​我上面写的“主要”字,然后按 RUN.. 你会看到一个绿色的小箭头(播放按钮)。这是在 Intellij 中运行类的唯一方法。

希望对你有帮助

【讨论】:

  • 我不需要 IntelliJ 为我执行 jar,我想知道如何创建可执行 jar。
  • 哦,好的。好吧,您使用的是 maven 还是类似的?.. 如果没有,您可以在此链接中查看如何构建和创建自己的 jar。希望它有所帮助:) blog.jetbrains.com/idea/2010/08/quickly-create-jar-artifact
  • 我不使用 maven,我的 jar 导出正常并且可以从命令行运行,但是取消 eclipse 生成的那些它不会在双击时启动。
  • 双击会发生什么?它会打开并尝试提取文件吗?您是否使用我给您的链接中的说明创建了 jar 文件?
  • 当我双击绝对没有任何反应时,我第一次使用你给我的链接来创建 jar。
【解决方案2】:

如果您的 JAR 从命令行使用 jar -jar <file> 启动,则它与 JAR 文件一样可执行(换句话说,元数据指定主类的位置)。如果您想使用操作系统提供的工具来指定当您双击 .jar 文件时,它应该执行 java -jar <file>,您可以这样做,但这超出了 JAR 文件的范围。例如,如果您运行的是 Windows,您应该能够通过遵循here 概述的过程来实现这一点。同样,这是特定于操作系统的,甚至可能特定于您正在运行的版本,并且本质上只是围绕双击事件执行java -jar 命令的精美包装。

【讨论】:

  • eclipse 是如何做到的?使用 eclipse 导出的同一个项目在双击时工作...
  • 任何给定的软件都可以很容易地专门覆盖双击所做的事情。它需要做的就是在后台静默运行java -jar <file>。我从您提出问题的方式中得到了它,您希望双击可以在任何地方工作,而不仅仅是在 IntelliJ 中。我知道您可以在 IntelliJ 中使用的唯一方法是定义一个外部工具(据我所知,它不能作为双击工作,但它将位于文件的右键菜单中) .
【解决方案3】:

不知道为什么每个人都对自我执行的 jar 装傻。 只需添加一个 MANIFEST.MF 文件并将完全限定的主类指定为 Main-Class:my.package.MyClass

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

完成此操作后,您只需双击 jar 即可执行它。

【讨论】:

  • jar 已经有这个文件,内容如下:Manifest-Version: 1.0 Class-Path: . Main-Class: entry.Main,这就是为什么我不明白为什么它没有执行。
  • 可能是因为需要将jar类型与Java关联起来。
  • 如果它们已经被 eclipse 导出,它们就可以正常工作,只有在 IntelliJ 导出时它们才能正常工作
  • 打开两个 jar 包(使用 Winzip 之类的 zip 文件查看器),看看有什么区别。
  • 确保 Manifest.mf 位于 meta-inf\ 目录中。 (meta-inf\ 本身在根级别)
【解决方案4】:

确保为 jar 设置了 x-flag。

java -jar xyz.jar

不需要,但是双击需要:

ls -l xyz.jar
chmod 755 xyz.jar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多