对于用c#、c++、VB等编写的Windows应用程序,"运行EXE的路径"是有明确定义的。
- - -Windows上的Java应用程序不是"exe应用程序",而是启动类文件或jar文件,而不是exe文件。因此,对于java应用程序,术语"ExePath"应该翻译为"MainClassPath"或"JarPath"。
- - -在某些情况下,程序员需要知道应用程序的jar或MainClass的物理路径。(例如,当您使用相同的类和相同的方法在Java和c#中开发大型项目时)
- - -感谢其他stackoverflow用户,这条语句完成了这项工作:
String exePath = URLDecoder.decode(this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8")
现在是我的问题:
如果我将相同的代码放入任何helper/utils jar库中,那么它将返回helperlib.jar的路径,而不会返回MainClass/AppJar的路径!
所以最终的getExePath()
助手方法应该看起来像这样:
return(URLDecoder.decode(Thread.currentThread().getStartingThread().getMainClass().getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8"));
(如果java中只有getStartingThread()
和getMainClass()
这样的方法…)
请告诉我最终的解决方案,我该如何实现这些步骤:
- 获取启动线程
- 获取启动线程的Main类
- 获取主类的路径
如果我没弄错的话,只需将带有所需类参数的方法放入helperlib-class中…
例如:
public static String getExePath(Object main) {
String path = "";
try {
path = URLDecoder.decode(main.getClass().getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return path;
}
,那么你可以调用它,例如从你的main-jar中使用参数'this'…
System.out.println("AppPath:n" + helperlib.getExePath(this));
…你在参数
中指定了类的路径希望能有所帮助,很抱歉我的英语不好…div;)