Frage

Anforderungen

Ich möchte eine Java -GUI -Anwendung unter Windows 7 veröffentlichen. Diese Anwendung verwendet das Swing -Toolkit und benötigt keinen nativen Code. Die Anwendung wird mit einem installiert NSIS Installateur. Ich möchte diese Anwendung so gut wie möglich in Windows 7 integrieren. Das heisst:

  • Wenn die Anwendung ausgeführt wird, muss sie möglich sein, um die Anwendung in die Taskleiste festzuhalten.
  • Es muss möglich sein, Datendateien mit der Anwendung zu verknüpfen, damit Windows diese Dateien mit meiner Anwendung öffnet.
  • Muss automatisch mit der 32 -Bit -Java -Laufzeit und der 64 -Bit -Java -Laufzeit arbeiten. Wenn der Benutzer also eine 32-Bit-Java deinstalliert und stattdessen eine 64-Bit-Java (oder umgekehrt) installiert, muss meine Anwendung noch funktionieren.
  • Muss große Schriftarten der Fenster unterstützen. Ich verstehe diese Funktion nicht wirklich. Ich weiß nur, dass einige Anwendungen es vollständig ignorieren, andere (wie Google Chrome) Pixel-skaliert sind (sieht wirklich hässlich aus) und andere unterstützen es einfach, indem sie einfach größere Schriftarten wie beabsichtigt verwenden (das ist es, was ich möchte und normalerweise funktioniert es. Nur die Winrun4J-Lösung unten erwähnt funktioniert nicht damit).

Getestete Lösungen

Winrun4j

Winrun4j ist eine EXE -Datei, die die Java -Anwendung startet. Da die Anwendung nicht einen neuen Java -Prozessgabeding für Windows für die EXE -Datei ist, ist die Anwendung. Es gibt also kein Problem mit der Taskleiste. Dateiverbände funktionieren, da die Dateien einfach der EXE -Datei zugeordnet werden können.

Probleme:

  • Unterstützt keine großen Schriftarten. Das Anwendungsfenster ist stattdessen Pixel-scaliert (wie Google Chrome).
  • Abhängig von der installierten JRE müssen zwei verschiedene EXE -Dateien verwendet werden. Wenn also das 64 -Bit -JRE installiert ist, muss die Anwendung mit der 64 -Bit -Exe -Datei gestartet werden. Wenn 32 -Bit -JRE -Ins installiert sind, muss die andere Exe verwendet werden. Dies ist nicht benutzerfreundlich, da der Benutzer nicht versteht, warum er das 32-Bit-Exe auf einem 64-Bit-Betriebssystem verwenden muss, wenn nur ein 32-Bit-JRE installiert ist.

Launch4J

Launch4J Erstellt einen 32 -Bit -Exe, der einen externen Java -Prozess startet, um die Java -Anwendung zu starten. Im Gegensatz zu Winrun4J kann es also auch einen 64 -Bit -Java beginnen.

Probleme:

  • Die Anwendung kann nicht an die Taskleiste festgehalten werden.
  • System.out.println wird nicht zur Konsole drucken, wenn headerType="gui", unabhängig davon, ob die Anwendung aus der Konsole gestartet wird.

KRUG

Unter Windows können Sie einfach auf die JAR -Datei klicken, um die Anwendung zu starten. Installed JRE spielt keine Rolle, funktioniert einfach. Aber...

Probleme:

  • Die Anwendung kann nicht an die Taskleiste festgehalten werden.
  • Im Startmenü können Sie keine Abkürzung erstellen.
  • Dateien können keine JAR -Datei in Verbindung bringen.

Fledermaus/CMD

Eine einfache Stapeldatei wie diese kann verwendet werden, um die Anwendung zu starten:

@echo off
start c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar" %1

Für diese Stapeldatei kann eine Verknüpfung erstellt werden, um ein benutzerdefiniertes Symbol festzulegen.

Probleme:

  • Ein DOS -Fenster taucht beim Start der Anwendung auf.
  • Die Batch -Datei weiß nicht, wo sich Javaw.exe befindet. Je nachdem, welche Java -Version (32 oder 64 Bit) installiert ist, kann sie sich möglicherweise befinden c:\windows\syswow64 Stattdessen leitet Windows diesen Anruf nicht automatisch von Batch -Dateien weiter. Verwendung der JAVA_HOME Umgebungsvariable ist auch ein No-Go, da Java dies nicht automatisch festlegt.
  • Wenn Dateien mit der Batch -Datei verknüpft werden, kann kein benutzerdefiniertes Symbol festgelegt werden.
  • Die Taskleiste -Unterstützung funktioniert nicht ordnungsgemäß. Die Anwendung kann darauf festgehalten werden, wenn die Batch -Datei manuell gestartet wird. Wenn Sie jedoch auf eine zugeordnete Datei doppelt klicken, funktioniert sie nicht.

Abkürzung

Anstatt eine Batch -Datei zu verwenden, ist es möglich, nur eine Verknüpfung zu erstellen, um die Anwendung zu starten. Es links zu diesem Befehl: c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar". Windows leitet diesen Aufruf automatisch in das Verzeichnis sysWow64 weiter, wenn ein 32 -Bit -Java -JRE installiert ist.

Probleme:

  • Nicht möglich, Dateien damit zu verknüpfen, da Windows nur EXE/COM/PIF/BAT/CMD -Dateien als Assoziationsziele akzeptiert. LNK -Dateien funktionieren nicht.

Frage

Gibt es eine andere Lösung, die alle Anforderungen von oben erfüllt? Oder gibt es Tricks, um die Probleme mit den genannten Lösungen zu lösen?

Lösung

Nach dem Lösen des Taskleisten-Pinning-Problems verwenden Launch4J Sieht nach der besten Lösung aus. Launt4J kann problemlos in ein Maven -Projekt integriert werden (mit Dies oder Dies Plugin), die Konfiguration ist ziemlich einfach und alles funktioniert außerhalb der Boxausnahme von Taskleisten -Pinning. Für die Taskleiste muss die Java-Anwendung ein AppModelUSerID festlegen, wie in der Antwort auf die Antwort erläutert diese Frage.

Zusätzlich muss die Java -Anwendung von einem Installateur installiert werden, der mindestens eine Verknüpfung auf das EXE installieren muss. Diese Verknüpfung muss auch das AppModelUserID enthalten. Mit NSIS kann dies mit dem erfolgen Winshell -Plugin und eine solche Konfiguration:

CreateShortCut "$SMPROGRAMS\MyApp.lnk" \
    "$INSTDIR\myapp.exe" "" "$INSTDIR\myapp.exe" 0 SW_SHOWNORMAL
WinShell::SetLnkAUMI "$SMPrograms\MyApp.lnk" "MyAppModelUserId"

Aus irgendeinem unbekannten Grund muss diese Verknüpfung nur existieren. Sie müssen es nicht benutzen. Sie können auf die Exe- und Taskleiste doppelklicken, die immer noch funktioniert. Sie können sogar die Verknüpfung in einem Unterordner Ihres Anwendungsordners erstellen. Die Taskleiste-Pinning funktioniert nicht mehr, wenn die letzte Abkürzung der EXE-Datei entfernt wird.

War es hilfreich?

Lösung

Versuchen Sie es mit Launch4J (http://launch4j.sourceforge.net/), es ist ein einfaches Glas -zu -Exe -Wrapper (tatsächlich ist es optional, das Glas zu wickeln). Es sollte Ihre Symbol- und Taskleistenanforderungen lösen. Es ist auch fähig, die installierten JREs (einige konfigurierbare Regeln) zu finden. Das Schriftproblem, das ich nicht ganz bekomme. Swing sollte je nach Windows -Einstellungen automatisch Schriftarten verwenden, es sei denn, Sie überschreiben diese in den JRE -Optionen oder in Code.

Andere Tipps

Java Webstart - Ich würde heutzutage nicht in Betracht ziehen, eine Anwendung auf andere Weise zu verteilen.

Der Benutzer muss mindestens J2SE 1.4 haben. Wenn Ihre Anwendungen eine spätere Version benötigen, lädt der Webstart automatisch eine geeignete JRE herunter.

Siehe das Jnlp Referenz für die Tags für die Desktop -Integration (shortcut und offline-allowed) und Dateiverbände (association). Diese werden jedoch nur in WS 1.5 unterstützt.

Ich benutze Launch4J (über Maven mit dem Maven-Launch4J-Plugin um noch präziser zu sein), und ich implementiere das System -Tray -Management aus meiner Anwendung ... (siehe http://java.sun.com/developer/technicalarticles/j2se/desktop/javase6/systemtray/).

Ich hatte mit Winrun4J insgesamt guten Erfolg, aber ich habe nicht viel mit Schriftarten getan, also werde ich gestehen, dass ich nicht sicher bin, warum Sie das Problem haben, das Sie dort beschreiben.

Nach dem, was Sie beschreiben, klingt es jedoch so, als hätten Sie sehr spezifische Anforderungen von einem Java -nativen Launcher. Warum nicht einfach deine eigenen schreiben? Sie können mit so etwas wie Winrun4J (Open Source, lizenziert unter der Eclipse CPL) beginnen und es einfach an Ihre Bedürfnisse ändern.

Alternativ können Sie sich die nativen Launcher ansehen, die von anderen Programmen verwendet werden. Die Eclipse- und NetBeans Launcher scheinen beide ziemlich gut zu funktionieren, und beide sind Open Source. Möglicherweise können Sie auch einen von ihnen ziemlich leicht anpassen.

Abgesehen davon sehen Sie sich auch die neue Funktion an, um Ihre App im Tooltray/SystemTray zu haben:

Oracle hat a Lernprogramm So verwenden Sie das Systemfach.

Das ist Java SE 6 verwandt ... macht mich auch wickler, welche anderen Leckereien in der neueren Java 7 sein könnten?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top