6

私が作成した Java デスクトップ アプリケーションがあります。実行中に、システムで定義されたデフォルトのパス名にフォルダーとファイルを作成します。

Java.io.files は次のように明確に述べています。By default the classes in the java.io package always resolve relative pathnames against the current user directory. This directory is named by the system property user.dir, and is typically the directory in which the Java virtual machine was invoked.

さらに、IzPack を使用して、インストールとショートカットの作成を有効にしています。

XP コンピューターでアプリケーションを実行すると、インストール後にデスクトップ ショートカットが作成され、Izpack が Jar をインストールした場所に上記のファイルとフォルダーが作成されます。これは予想される動作です。

しかし、これを Vista マシンでテストすると、フォルダとファイルがデスクトップに作成されます。Jar は正しい場所 (c:\program files など) にありますが。

これらのファイルは、Jar が入っているのと同じフォルダーに作成したいと考えています。

ここで何が起こっているのかについて誰かが私に洞察を与えることができますか?

4

1 に答える 1

1

これは、Vista/Seven では、Program Files フォルダーへの書き込みには管理者の干渉が必要なため、JVM はフォールバックとして次の書き込み可能な場所、つまりデスクトップ (またはユーザー ドキュメント ディレクトリ) を探します。ただし、すべてのOSで統一された方法でユーザーホームディレクトリを簡単に決定できます。これは、JVMに適切な場所を選択させるよりもはるかに優れています。

これは Windows 上の JVM の既知のバグであるため、それでも問題が解決しない場合は、フォールバックとして、正しいユーザー ホーム フォルダーを指すシステム環境変数USERPROFILEを確認します。

String userHome = System.getenv("USERPROFILE");
于 2012-01-11T15:07:00.843 に答える