「実行中の EXE のパス」は、C#、C++、VB などで記述された Windows アプリケーションに対して適切に定義されています。
- Windows 上の Java アプリケーションは「EXE アプリケーション」ではなく、EXE ファイルではなくクラスファイルまたは jar ファイルが開始されます。そのため、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()
やのようなメソッドしかなかった場合...)getMainClass()
-
最終的な解決策を教えてください。これらの手順をどのように実装できますか。
- 開始スレッドを取得する
- 開始スレッドのメイン クラスを取得する
- メイン クラスのパスを取得する