Java GUIアプリケーションをWindows 7で公開したい。このアプリケーションはSwing Toolkitを使用しており、ネイティブコードを必要としない。アプリケーションは [〜# 〜] nsis [〜#〜] インストーラーです。このアプリケーションをWindows 7にできる限り統合したいと考えています。これは、次のことを意味します。
WinRun4j はJavaアプリケーションを起動するEXEファイルです。アプリケーションは新しいJavaプロセスをフォークしないため、WindowsはEXEファイルISアプリケーション。タスクバーに問題はありません。ファイルは単にEXEファイルに関連付けることができるため、ファイルの関連付けは機能します。
問題:
Launch4J は、外部Javaプロセスを起動するための32ビットEXEを作成しますJavaアプリケーションを起動します。WinRun4Jとは異なり、 64ビットJava。
問題:
System.out.println
は、アプリケーションがコンソールから起動されたかどうかに関係なく、headerType="gui"
の場合はコンソールに出力されません。Windowsでは、JARファイルをダブルクリックするだけでアプリケーションを起動できます。インストールされたJREは問題ではなく、単に機能します。だが...
問題:
次のような単純なバッチファイルを使用して、アプリケーションを起動できます。
@echo off
start c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar" %1
このバッチファイルのショートカットを作成して、カスタムアイコンを設定できます。
問題:
c:\windows\syswow64
に配置され、Windowsはこの呼び出しをバッチファイルから自動的にリダイレクトしません。Java_HOME
環境変数の使用もJavaはこれを自動的に設定しないため、立ち入り禁止。バッチファイルを使用する代わりに、アプリケーションを起動するためのショートカットのみを作成することができます。このコマンドにリンクします:c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar"
。 32ビットJava JREがインストールされている場合、Windowsはこの呼び出しをSysWOW64ディレクトリに自動的にリダイレクトします。
問題:
上記のすべての要件を満たす別のソリューションはありますか?または、言及されたソリューションの問題を解決するためのトリックはありますか?
Launch4j を使用してタスクバーのピン留めの問題を解決すると、最良の解決策のように見えます。 Launch4jは、Mavenプロジェクトに簡単に統合できます( this または this プラグインを使用)。設定は非常に簡単で、タスクバーの固定を除いてすべてがそのまま機能します。タスクバーのピン留めの場合、Javaアプリケーションは この質問 の回答で説明されているようにappModelUserIdを設定する必要があります。
さらに、Javaアプリケーションは、EXEを指す1つのショートカットを少なくとも1つインストールする必要があるインストーラーによってインストールされる必要があります。このショートカットには、appModelUserIdも含まれている必要があります。NSISでは、これは WinShellプラグイン とこのような設定:
CreateShortCut "$SMPROGRAMS\MyApp.lnk" \
"$INSTDIR\myapp.exe" "" "$INSTDIR\myapp.exe" 0 SW_SHOWNORMAL
WinShell::SetLnkAUMI "$SMPrograms\MyApp.lnk" "MyAppModelUserId"
何らかの理由により、このショートカットは存在していなければなりません。使用する必要はありません。 EXEをダブルクリックしても、タスクバーの固定は機能します。アプリケーションフォルダーのサブフォルダーにショートカットを作成することもできます。 EXEファイルの最後のショートカットを削除すると、タスクバーの固定が機能しなくなります。
Launch4j( http://launch4j.sourceforge.net/ )を試してください。これは、ラッパーを実行するための単純なjarです(実際にはjarのラッピングはオプションです)。アイコンとタスクバーの要件を解決するはずです。インストールされているJRE(一部の設定可能なルール)を検索することもできます。フォントの問題はよくわかりません。JREオプションまたはコードで上書きしない限り、SwingはWindowsの設定に応じて自動的にフォントを使用するはずです。
Java Web Start -最近は、アプリケーションを他の方法で配布することは考えていません。
ユーザーには少なくともJ2SE 1.4が必要です。アプリケーションに新しいバージョンが必要な場合、Web Startは適切なJREを自動的にダウンロードします。
デスクトップ統合用のタグ(shortcut
およびoffline-allowed
)については、 [〜#〜] jnlp [〜#〜] リファレンスを参照してください。ファイルの関連付け(association
)。ただし、これらはWS 1.5でのみサポートされています。
Launch4jを個人的に使用し(maven-launch4j-pluginを使用してmavenを介してより正確に)、アプリケーション内からシステムトレイ管理を実装します...( http://Java.Sun.com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray/ を参照)。
余談ですが、アプリをツールトレイ/システムトレイに配置するための新機能も確認してください。
Oracleには、システムトレイの使用方法について チュートリアル があります。
それはJava SE 6に関連しています... ...新しいJava 7?
WinRun4Jは全体的にはうまくいきましたが、フォントについてはそれほど多くは行っていないので、そこに記載されている問題が発生している理由を理解できていないことを認めます。
しかし、あなたが説明したことから、Javaネイティブランチャーからの非常に具体的な要件があるように思われます。独自のランチャーを作成するだけではどうですか?WinRun4J(オープンソースである、 Eclipse CPLの下でライセンスされ、必要に応じて変更します。
または、他のプログラムで使用されるネイティブランチャーを調べることもできます。 EclipseランチャーとNetBeansランチャーはどちらもかなりうまく機能しているようで、どちらもオープンソースです。そのうちの1つをかなり簡単に適応させることもできます。