Java应用程序将从CMD和Eclipse运行,但不能双击

时间:2013-08-20 11:19:02

标签: java windows compilation cmd executable-jar

我已经完成了搜索,我可以看到很多人遇到了和我一样的问题,但没有一个解决方案对我有用。

基本上我在Eclipse中有一个来自旧Windows安装的Java项目。我已经清理并重建了它,因为起初它不会编译,但现在我将它导出为Runnable Jar。但是,我可以让应用程序出现的唯一方法是在命令提示符下执行java -jar foo.jar,或者在Eclipse中运行它。如果我在Windows资源管理器中双击JAR,即使我知道Java正确关联也没有任何反应,因为其他Runnable Jars可以工作。

项目只在其构建路径库中列出了x86 JRE,并且列出的所有文件似乎都存在。我正在运行Windows 7 HP。

更新:对不起,我刚刚发现没有其他Runnable Jars正在运行。如果它们被launch4j包裹起来,那么它们可以工作......

编辑:我从Eclipse导出的Runnable Jars在其他系统上运行正常,并在双击时加载

5 个答案:

答案 0 :(得分:7)

某些注册表值或文件关联可能搞砸了。擦除所有现有的JRE和JDK并重新安装它们可以解决您的问题。


或者您可以通过在此处手动编辑注册表值来修复它: HKLM > SOFTWARE > Classes > jarfile > shell > open > command 我的价值是

输入:REG_SZ

数据:"C:\Program Files\Java\jre8\bin\javaw.exe" -jar "%1" %*

您当然希望该路径指向您的javaw.exe,并确保您有其他参数。

答案 1 :(得分:1)

当我使用Spring工具套件时,我也遇到了同样的问题。

您可以使用以下步骤: -

  • 右键点击项目 - >出口 - > Runnable jar文件 - > (这里,在库处理中,有三个选项,你必须选择中间的一个,即包所需的库到生成的jar.It也将打包外部依赖)。

- 在我的情况下,我的runnable jar只在我的环境上执行,即我已经创建了那个JAR。最初我选择了第一个创建JAR的选项,即将所需的库提取到所需的JAR中。但这不合适。

它可能对你有帮助。如果我出错了,请让我纠正。

答案 2 :(得分:1)

由于您可以运行运行命令行的JAR,因此我认为您的问题与双击时设置的运行文件的Java版本有关。

要查找从命令行成功运行该文件的版本,并将其设置为默认打开JAR文件:

  1. 打开一个新的命令提示符窗口。
  2. 运行echo %path%。在路径值中,您应该能够找到一个指向其中一个已安装Java版本的bin文件夹的路径值。在某处复制此路径。
  3. 导航到您要运行的JAR文件。右键单击JAR - >打开 - >选择默认程序... - >浏览...
  4. 浏览到您在步骤2中复制的路径。(最简单的方法是将其粘贴到地址栏中)
  5. 双击javaw.exe。
  6. 单击“确定”。
  7. 您现在应该能够运行JAR文件了。如果问题仍然存在,请告诉我。

答案 3 :(得分:-1)

我已经制作了一个罐子并将其保存在桌面上。然后,我双击罐子,它对我来说很好。

我和我所拥有的内容:在我的主课堂中,执行一些操作,最后我添加Thread.sleep(25000);来保持程序片刻。每次双击导出的jar后,我在系统进程树中添加了一个新的 javaw.exe进程。我在任务管理器上注意到了它。各个javaw.exe进程结束后25000ms。因为我的应用程序没有结合任何GUI,这就是为什么我没有看到相应进程的任何GUI更改。我很自信,如果我的应用程序有一些GUI,我肯定会在每次运行时获得相应的GUI窗口。

常见错误:当我们将项目从Eclipse导出为Runnable JAR文件时,它将使用选定的Eclipse启动配置和Eclipse特定的启动包装器导出。现在,如果配置不匹配,当您尝试通过双击运行它时,您将无法看到错误,如果您从CMD运行它,那么您肯定会得到错误日志。

要创建标准可执行JAR文件:要创建标准可执行JAR文件,您可以导出为 JAR文件指定主类在向导的最后一个屏幕中。

这对我很好。我使用了来自不同系统的相同jar并保持不同的位置。

答案 4 :(得分:-1)

这里真的很傻。

您是否曾尝试使用(java.exe或javaw.exe)提升打开.jar的权限?

右键点击该程序 - >属性 - >兼容性标签 - >检查底部的“以管理员身份运行此程序”按钮。

您可能在命令窗口中拥有提升权限,这可能会让它运行。