J'ai créé une image d'exécution Java pour une simple application OpenJFX. Afin d'exécuter cette application, jlink a généré automatiquement deux scripts de lancement dans le répertoire % image_path% / bin
. Voici à quoi il ressemble (celui pour Windows):
@echo off set JLINK_VM_OPTIONS= set DIR=%~dp0 "%DIR%\java" %JLINK_VM_OPTIONS% -m app/com.package.Launcher %*
Évidemment, lorsque j'exécute ce fichier batch, il ouvre une nouvelle fenêtre shell, ce qui n'est pas ce que je veux. J'ai essayé toutes les approches courantes: utilisez javaw
au lieu de java
, exécutez le script via la commande start
etc. Rien ne fonctionne.
Est-il possible d'éviter la fenêtre shell ou de créer en quelque sorte un lanceur natif?
4 Réponses :
Ok, j'ai compris qu'il n'est pas possible d'éliminer complètement la fenêtre shell. Dans le meilleur scénario, il scintille juste pendant ~ 1sec. Voici comment cela peut être réalisé:
@echo off set JLINK_VM_OPTIONS= set DIR=%~dp0 start "" "%DIR%\javaw" %JLINK_VM_OPTIONS% -m app/com.package.Launcher %* && exit 0
Il y a une demande de fonctionnalité concernant implémentation du lanceur natif mais ce n'est pas discuté activement.
Néanmoins, j'ai résolu le problème. Il existe un outil "Batch to EXE Converter". Il peut générer un exécutable (essentiellement le même fichier batch) qui peut exécuter votre application en silence.
Pourriez-vous s'il vous plaît ajouter un lien vers l'outil "Batch to EXE Converter"?
@PerdiEstaquel peut-être qu'Evan voulait dire ceci: battoexeconverter.com ?
Mieux vaut utiliser JDK_JAVA_OPTIONS au lieu de JLINK_VM_OPTIONS car il est interne à la JVM pour l'exécuter - docs.oracle.com/javase/9/tools/java.htm#JSWOR624
Cela semble possible en utilisant vbscript. Si vous mettez le script suivant dans un fichier .vbs à côté du fichier launcher.bat (ou quel que soit le nom du fichier batch):
CreateObject("Wscript.Shell").Run CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) & "\launcher.bat " & WScript.Arguments(0) & " > " & CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) & "\launch-log.log", 0, False
Ceci exécute le fichier batch dans le même répertoire , et redirige également stdout vers un fichier journal.
Ce que vous aimeriez réaliser est très bien possible. C'est en fait même assez facile et je l'utilise tous les jours. Une version à accès anticipé de jpackage est déjà disponible ici: http://jdk.java.net/jpackage/ < / a> La création d'exécutables fonctionne déjà joliment (je l'utilise sur Mac et Windows). Créer uniquement des installateurs est encore un peu problématique.
Il est très facile d'exécuter un fichier bat sans afficher la fenêtre cmd. il vous suffit de créer un fichier VBS pour exécuter le fichier bat avec le cmd suivant
Set WshShell = CreateObject("WScript.Shell") WshShell.Run chr(34) & ".\bin\launcher.bat" & Chr(34), 0 Set WshShell = Nothing
Enregistrez cmd dans le fichier hors du dossier bin avec un nom comme Launcher.vbs.
Si vous utilisiez JavaFX 9 ou 10, vous pouvez utiliser l'outil
javapackager
. Puisque vous ne l'êtes pas, vous devrez attendreJEP 343: Packaging Tool
(voir également JDK-8212780 ) qui fournira un nouvel outil nomméjpackage
( précédemment nomméjpackager
).