36

要件

Windows7でJavaGUIアプリケーションを公開したい。このアプリケーションはSwingToolkitを使用しており、ネイティブコードは必要ありません。アプリケーションは、NSISインストーラーを使用してインストールされます。このアプリケーションをできるだけWindows7に統合したいと思います。これの意味は:

  • アプリケーションの実行中は、アプリケーションをタスクバーに固定できる必要があります。
  • Windowsがこれらのファイルをアプリケーションで開くように、データファイルをアプリケーションに関連付けることができる必要があります。
  • 32ビットのJavaランタイムと64ビットのJavaランタイムで自動的に動作する必要があります。したがって、ユーザーが32ビットJavaをアンインストールし、代わりに64ビットJavaをインストールした場合(またはその逆)、アプリケーションは引き続き機能する必要があります。
  • Windowsの大きなフォント設定をサポートする必要があります。私はこの機能を本当に理解していません。一部のアプリケーションはそれを完全に無視し、他のアプリケーション(Google Chromeのように)はピクセルスケール(本当に醜いように見えます)であり、他のアプリケーションは意図したとおりに大きなフォントを使用するだけでそれをサポートします(それは私が望むものであり、通常は機能します。WinRun4Jソリューションのみ下記はそれでは動作しません)。

テスト済みのソリューション

WinRun4J

WinRun4jは、Javaアプリケーションを起動するEXEファイルです。アプリケーションは新しいJavaプロセスをフォークしないため、WindowsはEXEファイルがアプリケーションであると見なします。したがって、タスクバーに問題はありません。ファイルはEXEファイルに簡単に関連付けることができるため、ファイルの関連付けは機能します。

問題:

  • 大きなフォントはサポートしていません。代わりに、アプリケーションウィンドウはピクセルスケールになります(Google Chromeのように)。
  • インストールされているJREに応じて、2つの異なるEXEファイルを使用する必要があります。したがって、64ビットJREをインストールする場合は、64ビットEXEファイルを使用してアプリケーションを起動する必要があります。32ビットのJREがインストールされている場合は、他のEXEを使用する必要があります。32ビットのJREのみがインストールされているのに、64ビットのオペレーティングシステムで32ビットのEXEを使用する必要がある理由をユーザーが理解していないため、これはユーザーフレンドリーではありません。

Launch4J

Launch4Jは、外部Javaプロセスを起動してJavaアプリケーションを起動する32ビットEXEを作成します。したがって、WinRun4Jとは異なり、64ビットJavaを起動することもできます。

問題:

  • アプリケーションをタスクバーに固定できません。
  • System.out.printlnheaderType="gui"アプリケーションがコンソールから起動されているかどうかに関係なく、の場合はコンソールに出力されません。

JAR

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_HOMEJavaはこれを自動的に設定しないため、環境変数を使用することもできません。
  • ファイルをバッチファイルに関連付ける場合、カスタムアイコンを設定することはできません。
  • タスクバーのサポートが正しく機能していません。バッチファイルを手動で開始するとアプリケーションを固定できますが、代わりに関連ファイルをダブルクリックすると機能しません。

ショートカット

バッチファイルを使用する代わりに、アプリケーションを起動するためのショートカットのみを作成することができます。このコマンドにリンクしています:c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar"。32ビットのJavaJREがインストールされている場合、Windowsはこの呼び出しをSysWOW64ディレクトリに自動的にリダイレクトします。

問題:

  • WindowsはEXE/COM / PIF / BAT / CMDファイルのみを関連付けターゲットとして受け入れるため、ファイルを関連付けることはできません。LNKファイルは機能しません。

質問

上記のすべての要件を満たす別のソリューションはありますか?または、言及された解決策の問題を解決するためのトリックはありますか?

解決

Launch4jを使用してタスクバーの固定の問題を解決した後、最良の解決策のように見えます。Launch4jは(このプラグインまたはこのプラグインを使用して)Mavenプロジェクトに簡単に統合でき、構成は非常に簡単で、タスクバーの固定を除いてすべてがすぐに機能します。タスクバーを固定するには、この質問への回答で説明されているように、JavaアプリケーションでappModelUserIdを設定する必要があります。

さらに、Javaアプリケーションは、EXEを指すショートカットを少なくとも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ファイルの最後のショートカットが削除されると、タスクバーの固定が機能しなくなります。

4

5 に答える 5

7

Launch4jを試してください(http://launch4j.sourceforge.net/)、ラッパーを実行するための単純なjarファイル(実際にはjarファイルのラップはオプションです)。アイコンとタスクバーの要件を解決するはずです。また、インストールされているJRE(いくつかの構成可能なルール)を見つけることもできます。フォントの問題はよくわかりません。JREオプションまたはコードでフォントを上書きしない限り、SwingはWindowsの設定に応じてフォントを自動的に使用する必要があります。

于 2012-02-17T15:24:07.907 に答える
6

Java Web Start-最近では、他の方法でアプリケーションを配布することは考えていません。

ユーザーは少なくともJ2SE1.4を持っている必要があります。アプリケーションに新しいバージョンが必要な場合、WebStartは適切なJREを自動的にダウンロードします。

デスクトップ統合(および)のタグ、およびファイルの関連付け( )については、JNLPリファレンスを参照してください。ただし、これらはWS1.5でのみサポートされます。shortcutoffline-allowedassociation

于 2012-02-17T15:04:36.130 に答える
2

私は個人的にLaunch4jを使用し(より正確にはmaven-launch4j-pluginを使用してmavenを使用)、アプリケーション内からシステムトレイ管理を実装しています...(http://java.sun.com/developer/technicalArticlesを参照) / J2SE / Desktop / javase6 / systemtray /)。

于 2012-02-18T01:09:58.827 に答える
1

私はWinRun4J全体で良い成功を収めましたが、フォントについてはあまり取り組んでいないので、そこで説明している問題が発生している理由がわからないことを告白します。

ただし、あなたが説明していることから、Javaネイティブランチャーからの非常に特定の要件があるように思われます。自分で書いてみませんか?WinRun4J(オープンソースであり、Eclipse CPLの下でライセンスされています)のようなものから始めて、必要に応じて変更することができます。

または、他のプログラムで使用されているネイティブランチャーを調べることもできます。EclipseランチャーとNetBeansランチャーはどちらもかなりうまく機能しているようで、どちらもオープンソースです。それらの1つをかなり簡単に適応させることもできるかもしれません。

于 2012-02-17T23:38:20.553 に答える
1

余談ですが、アプリをツールトレイ/システムトレイに配置するための新機能も確認してください。

Oracleには、システムトレイの使用方法に関するチュートリアルがあります。

これはJavaSE6に関連しています....新しいJava7には他にどのような機能があるのでしょうか。

于 2012-02-17T23:57:37.963 に答える