1

Java Webstart を実行しているときに JVM の作業ディレクトリを変更する方法はありますか? system.setProperties("user.dir", newDir) を使用すると、それは設定されますが (system.getProperties() は設定されていることが示されます)、無視されます。

これは、jnlp ファイルを開始した作業ディレクトリを常に使用するという Java Webstart の制限ですか? jnlp ファイルのすべての権限を使用しています。

助けてください!

編集:私が今何をしていても、私のウェブスタートは常に user.dir を使用してファイルを保存します。もどかしい!

4

4 に答える 4

4

私自身も過去にこの質問をしたことがありますが、結局、私はそれを必要としないことにいつも気づきました。なぜ私はこれを言うのですか?

Java Web Start アプリは、Program Files. ほとんどのプログラムのようにコンピュータ上に存在することさえありません (多数の異なるファイルに分割され、JVM によって再アセンブルされます)。したがって、プログラムが必要なことを行うための独自のディレクトリを持っているとは言えません。

しかし、そうする必要はありません。理由は次のとおりです。

  1. Java には、データを保存する必要があるときに役立つPreferencesAPIがあります。APIの内部動作はPreferencesJWS と同じくらい神秘的であるため、これらの API は完全に適合します。いずれにせよ、何かをファイルに書き込む必要がある場合は、この API をチェックして、ニーズを満たすことができるかどうかを確認する必要があります。
  2. ユーザーのためにファイルを書き込む必要がある場合、プロンプトを表示して場所を選択できるようにすることは、現在の作業ディレクトリを使用してファイルを読み書きしないことを意味します。
  3. オブジェクトをシリアル化する必要がある場合は、user.home@AndrewThompson が提案したように、リソースを使用してプログラム ディレクトリを作成するだけです。Program Filesこれは「あなたの」ディレクトリであり、 (例として Windows で実行している場合) のディレクトリよりも優れています (実際にはより優れています)。

結論として、(私が遭遇した) すべての場合において、現在の作業ディレクトリを変更する必要はありません。独自のフォルダーが必要な場合は、フォルダーを作成しますuser.home(ファイルのアクセス許可の問題に遭遇しないため)。

于 2013-11-02T11:28:56.257 に答える
2

..私が使用するすべての設定ファイルは、user.dir に作成されます。

間違いがあります。それらをuser.home& のサブディレクトリに入れて、問題は解決しました。

于 2013-10-31T22:57:07.480 に答える
0

user.dirJava WebStartの実行のためにプロパティを本当に転用する必要があるという仮説では、これが私が見つけた唯一のオプションです:このシステム環境変数を設定します(システム全体):

_JAVA_OPTIONS="-Duser.dir=C:\Temp"

ただし、注意してください。このオプションは読み取られ、すべての JVM 実行に適用されます。

なぜ私の文脈でそれが必要だったのですか? Java WebStart ClassLoader は、キャッシュ内の jar ファイルからリソースを取得する前に、ユーザー プロファイル内の単一のリソース (クラス、プロパティなど) を探していたためです。ユーザー プロファイルをネットワーク ストレージに移動したため、アプリケーションの起動が非常に遅くなりました。私はまだ Java ソースを調査して、この動作を理解 (および回避) しています。したがって、私のアプリケーションは設定なしで完全に動作しますuser.dirが、それが現時点で発生したパフォーマンスの問題に対する唯一の回避策でした。

于 2014-11-13T07:23:50.900 に答える
-1

実行時パラメーターまたはユーザー固有の設定を渡すための推奨される方法は、jnlp 引数を使用することです。

<application-desc main-class=".....">
   <argument>user.home</argument>
   ..............
于 2013-10-31T23:49:25.737 に答える