首先:我意识到这个问题应该很简单,很多人似乎都经历过这个问题。但是,我的问题似乎与现有帖子的略有差异。
我正在使用NetBeans来编译Java应用程序。完成构建后,输出正确进入dist \文件夹。那里有jar文件。如果我转到命令行,请导航到该文件夹,然后调用以下命令:
java -jar Prosperity.jar
一切正常。显然,应用程序的名称是Prosperity。以下命令也可以正常工作:javaw -jar Prosperity.jar
但是,双击.jar文件会显示消息:“找不到主类:”,然后给出.jar文件的路径。我已经检查过一百次.jar文件中存在META-INF文件夹,并且其中存在一个具有正确主类名的MANIFEST.MF。我还检查了主类(App.class).class文件是否存在于.jar文件中。
所以问题是:双击文件和运行javaw之间的区别是什么?它真的令人沮丧,它不会只是运行!
感谢您给我的任何指示,我在这里tearin'我的头发!
答案 0 :(得分:25)
也许你的文件关联搞砸了。在命令提示符下,尝试运行
ftype | find "jarfile"
在我的64位Windows 7计算机上显示
jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*
您也可以使用ftype
:
ftype jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*
答案 1 :(得分:11)
刚发现这篇帖子......
如果只有在双击jar文件而不是cmd启动时遇到问题,可能是因为JRE的版本错误(6代替7)。
只需更改regedit中的值:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\jarfile\shell\open\command]
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*
到:
"C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*
如果更新此值,应该没有问题。
注意:在Windows上切换32到64位版本:
- > "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*
将使用64位版本的JRE
- > "C:\Program Files (x86)\Java\jre7\bin\javaw.exe" -jar "%1" %*
将使用32位版本的JRE
答案 2 :(得分:1)
搜索您的注册表并查看以下项目
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command]
@="\"C:\\Program Files (x86)\\Java\\jre6\\bin\\javaw.exe\" -jar \"%1\""
[HKEY_CLASSES_ROOT\jarfile\shell\open\command]
@="\"C:\\Program Files (x86)\\Java\\jre6\\bin\\javaw.exe\" -jar \"%1\""
[HKEY_CURRENT_USER\Software\Classes\Applications\javaw.exe\shell\open\command]
@="\"C:\\Program Files (x86)\\Java\\jre6\\bin\\javaw.exe\" -jar \"%1\""
答案 3 :(得分:1)
我也遇到过这个错误。我使用命令提示符检查了文件关联,一切正确。直到我尝试使用java -jar MyProgram.jar
从命令行运行.jar,它才真正向我展示了问题的根源。
事实证明.jar是在JDK 7下编译的,而我只是运行JRE 6.这是在提示中给我的错误,这导致我真正的解决方案:
Exception in thread "main" java.lang.UnsupportedClassVersionError: MyProgram/Program : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: MyProgram.Program. Program will ex
it.
答案 4 :(得分:0)
我只是遇到了完全相同的问题,修复方法相同。我不得不完全删除关联,而不仅仅是用户自定义,并重新安装JRE。
修复前的关联仍然是:
jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*
之后(同样):
jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*
答案 5 :(得分:0)
如果上述方法无法解决问题,请尝试从您的电脑中删除.jar文件类型(您可以谷歌一个名为Unassoc.exe的软件并删除文件类型),然后问题得到解决! (至少,这是我的情况!)