Domanda

Requisiti

Voglio pubblicare un'applicazione Java GUI su Windows 7. Questa applicazione utilizza lo Swing Toolkit e non ha bisogno di alcun codice nativo. L'applicazione viene installato mediante un NSIS installatore. Voglio integrare questa applicazione in Windows 7 nel miglior modo possibile. Ciò significa che:

  • Quando l'applicazione è in esecuzione deve essere possibile al pin l'applicazione alla barra.
  • Deve essere possibile per i file di dati associati con l'applicazione in modo che Windows apre questi file con la mia applicazione.
  • deve lavorare automaticamente con il Java Runtime 32 bit e con il runtime Java a 64 bit. Così, quando l'utente disinstalla un 32 bit Java e installa un 64 bit Java al posto (o viceversa), allora la mia domanda deve ancora lavorare.
  • Deve supportare i caratteri grandi di impostazione Windows. Io non capisco questa funzione. So solo che alcune applicazioni ignorano completamente, altri (come Google Chrome) sono pixel in scala (sembra davvero brutto) e altri sostengono, semplicemente usando caratteri più grandi come previsto (che è quello che voglio e normalmente funziona. Solo la soluzione WinRun4J di seguito indicate non funziona con esso).

soluzioni testate

WinRun4J

WinRun4j è un file EXE che lancia l'applicazione Java. Poiché l'applicazione non fork di un nuovo processo di Java di Windows pensa che il file EXE è l'applicazione. Quindi non v'è alcun problema con la barra delle applicazioni. associazioni di file funziona perché il file possono essere semplicemente associato al file EXE.

Problemi:

  • non supporta i caratteri di grandi dimensioni. Finestra dell'applicazione è pixel-scala, invece (come Google Chrome).
  • due file diversi EXE devono essere utilizzati a seconda del JRE installata. Così, quando il JRE a 64 bit è installata allora l'applicazione deve essere avviato con il file EXE a 64 bit. Quando ins JRE a 32 bit installato quindi deve essere utilizzato l'altro EXE. Questo non è facile da usare perché l'utente non capisce perché deve usare il file EXE a 32 bit su un sistema operativo a 64 bit quando è installato solo un po '32 JRE.

Launch4J

Launch4J crea un file EXE a 32 bit che lancia un processo Java esterna per avviare l'applicazione Java. Quindi, a differenza WinRun4J può anche avviare una a 64 bit Java.

Problemi:

  • Non può appuntare l'applicazione alla barra delle applicazioni.
  • System.out.println non stamperà per consolare se headerType="gui", a prescindere se l'applicazione viene avviata dalla console.

JAR

Su Windows è sufficiente fare doppio clic sul file JAR per avviare l'applicazione. Installato JRE non importa, funziona semplicemente. Ma ...

Problemi:

  • applicazione non può essere inchiodato alla barra delle applicazioni.
  • Non è possibile creare un collegamento nel menu di avvio.
  • non può file associare un file JAR.

BAT / CMD

Un semplice file batch come questo può essere utilizzato per avviare l'applicazione:

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

Un collegamento può essere creato per questo file batch per impostare un'icona personalizzata.

Problemi:

  • A DOS finestra si apre quando si avvia l'applicazione.
  • Il file batch non sa dove si trova javaw.exe. A seconda della versione di Java (32 o 64 bit) è installato, può essere collocato in c:\windows\syswow64 invece e Windows non reindirizza questa chiamata da file batch automaticamente. Utilizzando la variabile d'ambiente JAVA_HOME è anche un no-go perché Java non imposta automaticamente.
  • Quando associando i file con il file batch allora nessun icona personalizzata può essere impostato.
  • Supporto
  • Barra delle applicazioni non funziona correttamente. L'applicazione può essere appuntato ad esso quando il file batch viene avviato manualmente, ma quando si fa doppio cleccare un file associato invece poi doesn' lavoro.

Collegamento

Invece di usare un file batch è possibile solo creare un collegamento per avviare l'applicazione. Si collega a questo comando: c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar". Di Windows reindirizza automaticamente questa chiamata alla directory SysWOW64 se è installata una Java JRE a 32 bit.

Problemi:

  • Non è possibile associare i file con esso perché Windows accetta solo EXE / COM / PIF / BAT / CMD file come obiettivi dell'associazione. file LNK non funzionano.

Domanda

C'è un'altra soluzione che soddisfa tutti i requisiti dall'alto? O ci sono dei trucchi per risolvere i problemi con le soluzioni di cui?

Soluzione

Dopo aver risolto il problema della barra delle applicazioni-pinning utilizzando Launch4J si presenta come la soluzione migliore. Launch4J può essere facilmente integrato in un progetto Maven (Con questo o questo plugin), la configurazione è piuttosto semplice e tutto funziona out of the box, tranne pinning barra delle applicazioni . Per barra delle applicazioni-pinning l'applicazione Java deve impostare un appModelUserId come spiegato nella risposta alla questo domanda .

Inoltre l'applicazione Java deve essere installato da un installatore che deve installare almeno un collegamento che punta alla EXE. Questo collegamento deve contenere anche l'appModelUserId. Con NSIS questo può essere fatto con la WinShell plug e una configurazione simile a questo:

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

Per qualche ragione sconosciuta questa scorciatoia ha solo di esistere. Non è necessario usarlo. È possibile fare doppio clic sul file EXE e le opere della barra delle applicazioni-pinning ancora. È anche possibile creare il collegamento in qualche sottocartella della vostra cartella dell'applicazione. smette di funzionare quando viene rimosso l'ultimo collegamento del file EXE barra delle applicazioni-pinning.

È stato utile?

Soluzione

Prova Launch4J ( http://launch4j.sourceforge.net/ ), è un semplice barattolo di involucro exe (effettivamente avvolgere il vaso è opzionale). Si dovrebbe risolvere le vostre esigenze icone e barra delle applicazioni. E 'anche in grado di localizzazione installato (alcune regole configurabili) di JRE. Il problema di carattere non ho ben capito, Altalena dovrebbe utilizzare automaticamente i font a seconda delle impostazioni di Windows, a meno che in qualche modo sovrascrittura che nelle opzioni di JRE o nel codice.

Altri suggerimenti

Web Start - non vorrei prendere in considerazione la distribuzione di un'applicazione qualsiasi altro modo, in questi giorni .

L'utente ha bisogno di avere almeno J2SE 1.4; Se le applicazioni ha bisogno di una versione successiva, Web Start scarica automaticamente un JRE appropriata.

Vedere la JNLP di riferimento per i tag per integrazione con il desktop (shortcut e offline-allowed), e le associazioni di file (association). Questi sono supportati solo in WS 1.5 però.

io personalmente uso Launch4J (attraverso Maven con il Maven-Launch4J-plugin per essere ancora più precisi), e a implementare la gestione vassoio di sistema da dentro il mio applicazione ... (Vedere http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6 / systemtray / ).

Ho avuto un buon successo con WinRun4J nel complesso, ma non ho davvero fatto molto con i caratteri, quindi mi confesso io non sono sicuro di aver capito il motivo per cui hai il problema che ci descrive.

Da ciò che si descrive, tuttavia, sembra che tu abbia esigenze molto specifiche da un lanciatore nativo di Java. Perché non basta scrivere il proprio? Si potrebbe iniziare con qualcosa come WinRun4J (che è open source, rilasciato sotto licenza Eclipse CPL) e appena modificarlo per le vostre esigenze.

In alternativa, si potrebbe esaminare i lanciatori nativo utilizzato da altri programmi. I Eclipse e NetBeans lanciatori entrambi sembrano funzionare abbastanza bene, ed entrambi sono open source. Potreste essere in grado di adattare uno di loro abbastanza facilmente pure.

Per inciso, di controllare anche la nuova caratteristica di avere la vostra applicazione nel tooltray / systemtray:

Oracle ha un esercitazione su come utilizzare il vassoio di sistema.

Questo è Java SE 6 relativi .... mi fa anche avvolgitore quali altre chicche potrebbe essere nel più recente di Java 7?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top