-1

“运行的 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()

-

请指出最终的解决方案,我该如何实施这些步骤:

  • 获取起始线程
  • 获取起始线程的主类
  • 获取主类的路径
4

1 回答 1

0

如果我说对了,只需将带有所需类参数的方法放入您的 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;
}

然后你可以使用参数'this'从你的main-jar中调用它......

System.out.println("AppPath:\n" + helperlib.getExePath(this));

...并且您获得了参数中指定的类的路径

希望它对我的英语不好和抱歉... ;)

于 2013-04-17T10:38:22.193 回答