我在双击启动 jar 文件(并使用 java SE 打开(时遇到问题,jar 从命令行启动得很好,我创建的其他 jar 双击启动正常。
我使用 eclipse 导出器导出了 jar 文件,我使用了可运行的 jar 导出并在运行配置下选择了正确的 main(( 类
当我使用 jar 运行时java -jar myjar.jar
它按预期运行,没有引发异常
我在 linux/windows 下都有同样的问题,我真的不明白这一点,因为我使用相同方式创建的其他 jar 文件运行没有任何问题。
只是为了好玩,我创建了一个
c
程序,只包含
int main(void){
system("java -jar myjar.jar");
return 0;
}
当我双击编译的
c
程序时,我的罐子打开了!
这是清单
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
,然后它挂在那里其他应该启动的窗口没有显示,请告诉我在哪里看...为什么它不起作用?因为它看起来像我的类扩展JFram
需要终端/cmd显示,我还应该注意,我正在使用一个名为R
的类根据语言和Cfg
类从文本文件中加载字符串,以检查程序是否首先启动或之前启动,然后加载正确的语言文件和资源。
编辑
正如答案中所建议的,我删除了所有JDK并安装了Oracle的JDk,如前所述仍然有相同的问题
我解决了我自己的问题,为什么:正如我在细节中所说,我使用JAR
文件外部的文本资源,我使用硬代码来获取这些资源,就像final File("lang/en.prop");
的事情是当使用 JAVA SE 打开从GUI
启动时,就像从另一个目录对我的 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("/"));
}
现在在启动时,我将首先在文件系统上找到我的位置,然后根据我当前的位置为我的程序设置所需文件的值,现在双击就像一个魅力! 简单
此问题可能存在于 Java SE 运行时环境的不正确安装中。可能需要从计算机中卸载所有 Java 跟踪,并使用 Oracle 技术网络中的脱机安装程序重新安装 Java。
在 Linux 上,添加 PPA ppa:webupd8team/java
并安装oracle-java8-installer
- 据我所知,它与许多桌面环境集成,至少它与 Ubuntu Unity 和 XFCE 集成,所以双击也应该在那里工作。