我在双击时启动jar文件时遇到问题(并使用java SE打开),jar从命令行启动就好了,我创建的其他罐子从双击启动时运行良好。
我使用eclipse导出器导出了jar文件,我使用了runnable jar导出,并在运行配置下选择了正确的main()类
当我使用java -jar myjar.jar
运行jar时,它会按预期运行,不会抛出任何异常
我在linux / windows下都有同样的问题,我真的没有看到这一点,因为我用同样的方式创建的其他jar文件没有任何问题。
为了好玩,我创建了一个仅包含
的c
程序
int main(void){
system("java -jar myjar.jar");
return 0;
}
当我双击已编译的
c
程序时,我的jar打开了!
这是MANIFEST
Manifest-Version: 1.0
Class-Path: . libs/commons-compress-1.10.jar libs/zip4j_1.3.2.jar libs/xz.jar libs/commons-io-2.4.jar libs/oat2dex.jar
Main-Class: deodex.Tester
以下是main
方法:
http://pastebin.com/M8Fhb4qW
package deodex;
import deodex.tools.Logger;
import deodex.ui.LangFrame;
import deodex.ui.Window;
public class Tester {
public static void main(String args[]) {
if (Cfg.isFirstLaunch()) {
Cfg.setCurrentLang(S.ENGLISH);
R.initResources();
@SuppressWarnings("unused")
LangFrame win = new LangFrame();
} else {
Cfg.readCfg();
R.initResources();
S.initTempFolders();
Logger.logToStdIO("[test]" + Cfg.getCurrentLang());
@SuppressWarnings("unused")
Window win = new Window();
}
}
}
提前致谢
更多详情
我尝试在我的代码之前添加一个新的JFrame
,双击只适用于显示的JFrame
,然后它会挂起另一个应该在不显示之后启动的Windows ,请告诉我在哪里看...为什么它不起作用?因为看起来我的扩展JFram
的类需要显示终端/ cmd,我还应该注意到我正在使用一个名为R
的类从文本文件中加载字符串,具体取决于语言和Cfg
用于检查程序是否首先启动或已启动的类,然后加载正确的语言文件和资源。
修改
正如答案中所建议我删除了所有JDK并安装了Oracle的JDk,如上所述仍然存在同样的问题
答案 0 :(得分:1)
我解决了我自己的问题,原因是:
正如我在细节中所说的那样,我使用JAR
文件外部的文本资源,我使用硬编码来获取final File("lang/en.prop");
之类的资源,从GUI
开始使用JAVA打开SE,就像从另一个目录运行命令到我的jar会失败,因为Cfg
类会抛出NullPointerException,因为文本资源不在那里所以我创建了一个名为PathUtils的新类
PathUtils.java
public static String getExcutionPath(){
String path = "";
try {
path =PathUtils.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("Somthing went wrong couldn't detemine our current location !");
}
return path.substring(0, path.lastIndexOf("/"));
}
现在在启动时,我将首先在文件系统上找到我的位置,然后根据我当前的位置设置我的程序所需文件的值,现在双击就像一个魅力!简单
答案 1 :(得分:0)
问题可能存在于Java SE Runtime Environment的不正确安装中。可能需要从您的计算机上卸载所有Java痕迹,并使用Oracle Technology Network中的脱机安装程序重新安装Java。
在Linux上,添加PPA ppa:webupd8team/java
并安装oracle-java8-installer
- 据我所知,它集成了很多桌面环境,至少它与Ubuntu Unity和XFCE一样,所以双击应该也在那里工作。