Windows 7でJavaアプリケーションを開始する最良の方法は何ですか?
-
27-10-2019 - |
質問
要件
Windows 7でJava GUIアプリケーションを公開したいのですが、このアプリケーションはSwing Toolkitを使用しており、ネイティブコードは必要ありません。アプリケーションはanを使用してインストールされます NSIS インストーラ。このアプリケーションをWindows 7にできる限り統合したいと思います。これの意味は:
- アプリケーションが実行されているときは、アプリケーションをタスクバーに固定することが可能である必要があります。
- Windowsがこれらのファイルをアプリケーションで開くように、データファイルをアプリケーションに関連付けることができる必要があります。
- 32ビットJavaランタイムと64ビットJavaランタイムで自動的に動作する必要があります。したがって、ユーザーが32ビットJavaをアンインストールし、代わりに64ビットJava(またはその逆)をインストールする場合、アプリケーションは引き続き機能する必要があります。
- Windowsの大きなフォント設定をサポートする必要があります。私はこの機能を本当に理解していません。一部のアプリケーションは完全に無視していることを知っていますが、他のアプリケーション(Google Chromeなど)はピクセルスケール(本当にugいもの)であり、他のアプリケーションは意図したとおりに大きなフォントを使用するだけでそれをサポートしています(それは私が望むものであり、通常は機能します。Winrun4Jソリューションのみが機能します。以下に言及することはできません)。
テスト済みソリューション
winrun4j
winrun4j Javaアプリケーションを起動するEXEファイルです。アプリケーションがフォークしないため、新しいJavaプロセスウィンドウはEXEファイルがアプリケーションであると考えています。したがって、タスクバーに問題はありません。ファイルは、ファイルがExeファイルに単純に関連付けられる可能性があるため、機能します。
問題:
- 大きなフォントはサポートしていません。代わりに、アプリケーションウィンドウはピクセルスケールです(Google Chromeなど)。
- インストールされているJREに応じて、2つの異なるEXEファイルを使用する必要があります。したがって、64ビットJREがインストールされている場合、アプリケーションは64ビットEXEファイルで開始する必要があります。 32ビットJRE INSがインストールされた場合、もう1つのEXEを使用する必要があります。ユーザーは、32ビットJREのみがインストールされているときに64ビットオペレーティングシステムで32ビットEXEを使用する必要がある理由をユーザーが理解していないため、ユーザーフレンドリーではありません。
Launch4j
Launch4j Javaアプリケーションを開始する外部Javaプロセスを起動する32ビットEXEを作成します。したがって、Winrun4Jとは異なり、64ビットJavaを開始することもできます。
問題:
- アプリケーションをタスクバーに固定できません。
System.out.println
IFのコンソールに印刷されませんheaderType="gui"
, 、コンソールからアプリケーションが開始されるかどうかに関係なく。
瓶
Windowsでは、JARファイルをダブルクリックしてアプリケーションを開始するだけです。インストールされたJREは問題ではなく、単に機能します。しかし...
問題:
- アプリケーションをタスクバーに固定することはできません。
- スタート]メニューにショートカットを作成できません。
- ファイルをJARファイルに関連付けることはできません。
BAT/CMD
このような単純なバッチファイルを使用して、アプリケーションを開始できます。
@echo off
start c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar" %1
このバッチファイルのショートカットを作成して、カスタムアイコンを設定できます。
問題:
- アプリケーションが開始されると、DOSウィンドウがポップアップします。
- バッチファイルは、javaw.exeがどこにあるかを知りません。どのJavaバージョン(32または64ビット)がインストールされているかに応じて、
c:\windows\syswow64
代わりに、Windowsはバッチファイルからこの呼び出しを自動的にリダイレクトしません。を使用してJAVA_HOME
Javaがこれを自動的に設定しないため、環境変数もノーゴーです。 - ファイルをバッチファイルに関連付ける場合、カスタムアイコンを設定できません。
- タスクバーのサポートは適切に機能していません。バッチファイルが手動で開始されたときにアプリケーションを固定できますが、代わりに関連するファイルをダブルクリックすると、動作しません。
ショートカット
バッチファイルを使用する代わりに、アプリケーションを開始するショートカットのみを作成することができます。このコマンドにリンクします。 c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar"
. 。 Windowsは、32ビットJava JREがインストールされている場合、この呼び出しをSYSWOW64ディレクトリに自動的にリダイレクトします。
問題:
- Windowsはexe/com/pif/bat/cmdファイルのみをアソシエーションターゲットとして受け入れるため、ファイルを関連付けることはできません。 LNKファイルは機能しません。
質問
上からすべての要件を満たす別のソリューションはありますか?または、上記のソリューションで問題を解決するためのトリックはありますか?
解決
タスクバーピンニングの問題を使用して解決した後 Launch4j 最良の解決策のように見えます。 Launch4Jは、Mavenプロジェクトに簡単に統合できます( これ また これ プラグイン)、構成は非常に簡単で、タスクバーピン留めを除いてすべてが箱から出しています。タスクバーピンするには、JavaアプリケーションがAppModeluserIDを設定する必要があります。 この質問.
さらに、Javaアプリケーションは、EXEを指すショートカットを少なくとも1つインストールする必要があるインストーラーによってインストールする必要があります。このショートカットには、appModeluseridも含まれている必要があります。 NSISでは、これはで行うことができます ウィンシェルプラグイン そして、このような構成:
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/)、そのシンプルな瓶からexeラッパー(実際に瓶を包むことはオプションです)。アイコンとタスクバーの要件を解決する必要があります。また、インストールされたJRE(設定可能なルール)を見つけることができます。フォントの問題は十分に得られません。Swingは、JREオプションまたはコードで何らかの形で上書きする場合を除き、Windowsの設定に応じてフォントを自動的に使用する必要があります。
他のヒント
私はPersonalyを使用してLaunch4Jを使用します(Maven with maven-launch4j-plugin さらに正確にするために)、そして私はアプリケーション内からシステムトレイ管理を実装します...(参照 http://java.sun.com/developer/technicalarticles/j2se/desktop/javase6/systemtray/).
私はwinrun4j全体で大成功を収めましたが、フォントであまりやっていないので、なぜあなたがそこに説明している問題を抱えているのかわからないと告白します。
しかし、あなたが説明していることから、Javaネイティブランチャーからの非常に具体的な要件があるように聞こえます。なぜあなた自身を書くだけではないのですか? Winrun4J(オープンソースであり、Eclipse CPLの下でライセンスされている)のようなものから始めて、ニーズに合わせて変更できます。
または、他のプログラムで使用されるネイティブランチャーを調べることもできます。 EclipseとNetBeansのランチャーはどちらも非常にうまく機能しているようで、どちらもオープンソースです。それらの1つを非常に簡単に適応させることができるかもしれません。
余談ですが、新しい機能をチェックして、アプリをツールトレイ/システムトレイに入れてください。
オラクルには チュートリアル システムトレイの使用方法について。
それはJava se 6関連です....また、私もウィンダーになります他のグッズは新しいJava 7にあるかもしれませんか?