如何在运行时获得java应用程序的ExePath/MainClassPath/MainJarPath



对于用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;)

相关内容

  • 没有找到相关文章

最新更新