Вопрос

Требования

Я хочу опубликовать приложение Java GUI в Windows 7. Это приложение использует Swing Toolkit и не нуждается в каком -либо собственном коде. Приложение установлено с помощью NSIS установщик. Я хочу интегрировать это приложение в Windows 7 максимально хорошим. Это означает:

  • Когда приложение запускается, должно быть возможно прикрепить приложение к панели задач.
  • Должно быть возможно связать файлы данных с приложением, поэтому Windows открывает эти файлы с моим приложением.
  • Необходимо автоматически работать со временем выполнения 32 -битной Java и с 64 -битной средой выполнения Java. Поэтому, когда пользователь удаляет 32-битную Java и вместо этого устанавливает 64-битную Java (или наоборот), тогда мое приложение все еще должно работать.
  • Необходимо поддерживать настройки больших шрифтов Windows. Я не очень понимаю эту функцию. Я просто знаю, что некоторые приложения игнорируют это полностью, другие (такие как Google Chrome) имеют пиксельные шкалы (выглядит действительно уродливо), а другие поддерживают его, просто используя более крупные шрифты, как предполагалось (это то, чего я хочу, и обычно это работает. Только решение Winrun4J упомянуто ниже не работает с этим).

Протестированные решения

Winrun4j

Winrun4j это файл EXE, который запускает приложение Java. Поскольку приложение не нарушает новый процесс Java, Windows считает, что файл EXE является приложением. Так что нет проблем с панелью задач. Файл ассоциации работает, потому что файлы могут быть просто связаны с файлом EXE.

Проблемы:

  • Не поддерживает большие шрифты. Вместо этого окно приложения имеет пиксельное масштаб (например, Google Chrome).
  • Два разных файла EXE должны использоваться в зависимости от установленного JRE. Таким образом, когда установлен 64 -битный JRE, приложение должно быть запущено с 64 -битным файлом EXE. При установке 32 -битных jre взимается другой EXE. Это не удобно для пользователя, потому что пользователь не понимает, почему он должен использовать 32-битный EXE в 64-битной операционной системе, когда установлен только 32-битный JRE.

Запуск4J

Запуск4J Создает 32 -битный EXE, который запускает внешний процесс Java для запуска приложения Java. Так что, в отличие от Winrun4J, он также может начать 64 -битную Java.

Проблемы:

  • Не могу прикрепить приложение на панель задач.
  • System.out.println не будет печатать на консоли, если 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 автоматически перенаправляет этот вызов в каталог Syswow64, если установлен 32 -битный Java JRE.

Проблемы:

  • Невозможно связать с ним файлы, потому что Windows принимает файлы Exe/Com/PIF/BAT/CMD в качестве целей ассоциации. Файлы LNK не работают.

Вопрос

Есть ли другое решение, которое выполняет все требования сверху? Или есть какие -нибудь хитрости, чтобы решить проблемы с упомянутыми решениями?

Решение

После решения задачи задачи задачи с использованием Запуск4J Похоже, лучшее решение. Запуск4J может быть легко интегрирован в проект Maven (с это или же это плагин), конфигурация довольно проста, и все работает из коробки, кроме закрепления панели задач. Для пропитанного панели задач приложение Java должно установить AppModelUserid, как объяснено в ответе на этот вопрос.

Кроме того, приложение Java должно быть установлено установщиком, который должен, по крайней мере, установить один ярлык, указывающий на EXE. Этот ярлык также должен содержать Appmodeluserid. С NSIS это можно сделать с Плагин Winhell и такая конфигурация, как это:

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

По какой -то неизвестной причине этот ярлык должен существовать только. Вам не нужно его использовать. Вы можете дважды щелкнуть EXE, а фиксация на панели задач все еще работает. Вы даже можете создать ярлык в какой -то подпапке папки вашей приложения. Заполняющий панель прекращает работу, когда удаляется последний ярлык файла EXE.

Это было полезно?

Решение

Попробуйте запустить4J (http://launch4j.sourceforge.net/), это простая банка для Exe Orbper (на самом деле обертка банки является необязательной). Это должно решить ваши требования к значке и панели задач. Он также способен найти установленные JRE (некоторые настраиваемые правила). Проблема шрифта, которую я не понимаю, Swing должен автоматически использовать шрифты в зависимости от настроек Windows, если вы не перезаписываете это в параметрах JRE или в коде.

Другие советы

Ява Веб -старт - В наши дни я бы не стал рассмотреть вопрос о том, чтобы распространять приложение по -другому.

Пользователь должен иметь как минимум J2SE 1.4; Если ваши приложения нуждаются в более поздней версии, Web Start автоматически загрузит соответствующий JRE.

Увидеть Jnlp ссылка на теги для интеграции настольных компьютеров (shortcut а также offline-allowed) и файловые ассоциации (association) Они поддерживаются только в WS 1.5, хотя.

Я лично использую запуск4J (через Maven с Maven-Launch4J-Plugin быть еще более точным), и я внедряю управление системными лотками из моего приложения ... (см. http://java.sun.com/developer/technicalarticlics/j2se/desktop/javase6/systemtray/).

У меня был хороший успех с Winrun4J в целом, но я не очень много делал с шрифтами, поэтому я признаюсь, что не уверен, что понимаю, почему у вас проблема, которую вы там описываете.

Однако из того, что вы описываете, звучит так, как будто у вас есть очень конкретные требования от нативной пусковой установки Java. Почему бы просто не написать свой собственный? Вы можете начать с чего -то вроде Winrun4J (который является открытым исходным кодом, лицензированным под CPL Eclipse) и просто изменить его до ваших потребностей.

В качестве альтернативы вы можете изучить местные пусковые установки, используемые другими программами. Пусковые установки Eclipse и Netbeans, похоже, работают довольно хорошо, и оба являются открытым исходным кодом. Возможно, вы сможете адаптировать один из них довольно легко.

Кроме того, также ознакомьтесь с новой функцией, чтобы ваше приложение в Tooltray/Systemtray:

У Oracle есть руководство о том, как использовать системный поднос.

Это Java SE 6, связанный с .... также заставляет меня намоточно, какие еще вкусности могут быть в более новой Java 7?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top