“运行的 EXE 的路径”为用 C#、C++、VB 等编写的 Windows 应用程序定义了良好的。
- 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-library,那么它将返回 helperlib.jar 的路径,它不会返回我的 MainClass/AppJar 的路径!
-
所以最终的getExePath()
辅助方法应该类似于:
return(URLDecoder.decode(Thread.currentThread().getStartingThread().getMainClass().getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8"));
(如果只有java 中的getStartingThread()
and之类的方法...)getMainClass()
-
请指出最终的解决方案,我该如何实施这些步骤:
- 获取起始线程
- 获取起始线程的主类
- 获取主类的路径