2

Windows XP と Win 7 で正しく動作するために構成情報を必要とする Windows で現在実行されている Java アプリがあります。その構成情報は、ユーザー変数 (アプリケーションにのみ適用される) ではなく、Windows システム変数 (アプリケーションのすべてのユーザーに適用される) を使用して定義されます。現在アプリケーションを実行しているユーザー)。

私の仕事は、Mac (OS X 10.6.8) で動作するようにすることです。JarBundler を使用して Mac 用のアプリをビルドするときに、これらの変数のプロパティを正しい値に設定すると、期待どおりに表示されます。 app フォルダー内の Info.plist ファイル内。入手可能なドキュメントを読んだところ、Info.plist プロパティは、Windows システム環境変数と同様に、アプリのすべてのユーザーに適用されるようです。

しかし、PackageMaker でパッケージを作成し、インストールしてアプリケーションを実行すると、これらの変数の値として null が返されます。Java の最新のアップデート -- update 9 を使用しています。

Info.plist ファイルがインストールされていることを確認しました。アプリ フォルダー内の予想される場所にあり、予想されるデータが含まれていること。

info.plist を使用するのではなく、(Property List Editor を使用して) 同じ変数を含むファイル ~/.MacOSX/environment.plist を作成し、コンピューターを再起動すると、アプリケーションは期待どおりに実行され、有効なデータが処理されていることが示されます。環境変数の要求に応じて返されます。

目標は、PackageMaker を介してエンド ユーザーがインストール可能なアプリケーションを作成することであるため、ユーザーが environment.plist の隠しフォルダーを作成する必要がなく、ファイルを手動でそこに移動し、ログアウトして再度ログインするか、コンピューターを再起動してから、アプリケーションを実行すると、Info.plist を使用して解決策を見つけたいと思います。

Java アプリが Info.plist からプロパティを正しく読み取れるようにするためのトリックはありますか? これを機能させるために、JarBundler、PackageMaker、またはプロパティ リスト エディタで行う必要があることはありますか?

それとも、Java コードを変更する必要があるのでしょうか? (環境変数データを読み取るためにどのコマンドが使用されているか正確にはわかりません。現在、ソース コードにアクセスすることはできませんが、この質問に答える必要がある場合はアクセスできます。)

編集:これは私の断片ですInfo.plist

<key>Properties</key> 
<dict> 
    ...
    <key>COMPENDIUM_DEVELOPER</key> 
    <string>true</string> 
    <key>CompendiumUserPath</key> 
    <string>/Applications/Compendium_CN</string> 
    <key>CompendiumSysPath</key> 
    <string>/Applications/Compendium_CN</string>
    ...
</dict>
4

1 に答える 1

2

を使用する代わりにJavaApplicationStub、バンドルの実行可能ファイルとしてシェル スクリプトの名前を指定できます。そこで定義された環境変数は、 経由でプログラムにアクセスできる必要がありますSystem.getenv()。例として、シェル スクリプトを参照する<dict>NetBeans からのエントリを次に示します。Info.plistMacOS/netbeans

<key>CFBundleExecutable</key>
<string>netbeans</string>
于 2012-06-29T01:09:37.030 に答える