Comment faire en sorte que mon application java ouvre une fenêtre console/terminal?


Existe-t-il un moyen de créer un exécutable .jar qui ouvrira la ligne de commande en double-cliquant?

Je fais un jeu d'aventure basé sur le texte. En ce moment, il est juste un labyrinthe avec des chambres. Finalement, il va être beaucoup plus grand et plus en profondeur, mais pour l'instant je veux juste la structure de base vers le bas. Quoi qu'il en soit, pour que cela fonctionne, j'ai obtenu des sorties et des entrées du système.hors.printf commande et le java.util.Scanner. Tout fonctionne à merveille jusqu'à présent, mais j'ai réalisé que je vais rencontrer un problème lorsque j'essaie d'envoyer cela à d'autres personnes qui ne savent pas comment ou ne veulent tout simplement pas exécuter le programme à partir de la ligne de commande.

Author: CaldwellYSR, 2011-10-09

10 answers

Si vous voulez un contrôle total, vous pouvez implémenter une fenêtre de console dans Swing qui fait ce que vous avez maintenant.

Si vous ne pouvez pas ouvrir ladite fenêtre (si sans tête) ou si l'utilisateur le demande sur la ligne de commande, alors utilisez simplement votre comportement actuel par défaut.

 6
Author: Thorbjørn Ravn Andersen, 2011-10-09 15:27:34

J'ai trouvé cela en cherchant moi-même une réponse, j'ai fini par écrire ce bit:

/**
 * This opens a command line and runs some other class in the jar
 * @author Brandon Barajas
 */
import java.io.*;
import java.awt.GraphicsEnvironment;
import java.net.URISyntaxException;
public class Main{
    public static void main (String [] args) throws IOException, InterruptedException, URISyntaxException{
        Console console = System.console();
        if(console == null && !GraphicsEnvironment.isHeadless()){
            String filename = Main.class.getProtectionDomain().getCodeSource().getLocation().toString().substring(6);
            Runtime.getRuntime().exec(new String[]{"cmd","/c","start","cmd","/k","java -jar \"" + filename + "\""});
        }else{
            THEMAINCLASSNAMEGOESHERE.main(new String[0]);
            System.out.println("Program has ended, please type 'exit' to close the console");
        }
    }
}

Je ne sais pas si ma réponse est toujours pertinente, mais n'hésitez pas à l'utiliser avec le commentaire conservé dans o /

Le seul défaut auquel je peux penser est qu'il laisse la fenêtre cmd ouverte une fois le programme terminé.

Utilisation: placez cette classe dans le même paquet que votre classe principale et définissez-la comme classe principale, elle ouvrira une fenêtre d'invite de commande si l'une n'est pas ouverte, ou si l'autre est ouverte, lancez la principale classe. Nom / emplacement du fichier jar est automatique. Conçu pour Windows, mais si vous le voulez pour un autre système, envoyez-moi un message et je vais le réparer. (Je pourrais faire la détection du système d'exploitation mais je suis paresseux et je fais simplement cela pour pouvoir retourner un fichier jar double-clic à mon professeur qui utilise Windows).

 13
Author: Brandon Barajas, 2015-03-19 07:01:26

Double-cliquer sur un pot l'ouvre avec l'application que vous lui avez associée dans votre système d'exploitation. Par défaut, javaw[.exe] est normalement associé aux fichiers jar. C'est le binaire qui s'exécute sans fenêtre de terminal. Pour voir un terminal en double-clic, vous devez associer le java[.exe] binaire avec des fichiers jar.

 3
Author: Ryan Stewart, 2011-10-09 15:19:42

Ou vous pouvez fournir un .sh .bat qui ouvrira un terminal et y appellera votre java.

 2
Author: YMomb, 2011-10-09 15:12:32

Tant Que le .jar est exécuté avec java.exe, une fenêtre de ligne de commande s'affiche. l'exécuter avec javaw.exe empêcherait cela.

Pour en savoir plus: http://download.oracle.com/javase/1.4.2/docs/tooldocs/windows/java.html

 1
Author: Simiil, 2011-10-09 15:09:05

C'est donc ma solution, j'ai utilisé le code de @Brandon Barajas et l'ai modifié. Il crée un batchfile qui démarre le programme par lui-même.

public static void main(String[] args){
    Console console = System.console();
    if(console == null && !GraphicsEnvironment.isHeadless()) {
        String filename = YOURMAINCALSS.class.getProtectionDomain().getCodeSource().getLocation().toString().substring(6);
        try {
            File batch = new File("Launcher.bat");
            if(!batch.exists()){
                batch.createNewFile();
                PrintWriter writer = new PrintWriter(batch);
                writer.println("@echo off");
                writer.println("java -jar "+filename);
                writer.println("exit");
                writer.flush();
            }
            Runtime.getRuntime().exec("cmd /c start \"\" "+batch.getPath());
        } catch(IOException e) {
            e.printStackTrace();
        }
    } else {
        //your program code...
    }
}

Si vous le souhaitez, vous pouvez ajouter un écrivain.println ("pause"); avant l'impression "exit" , pour garder la fenêtre ouverte après la fin du programme. Ensuite, vous devez appuyer surENTER pour fermer la fenêtre.

 1
Author: Frezze98 bolalo, 2018-04-28 19:07:29

Je suppose que le moyen le plus simple est d'écrire un raccourci simple pour votre fichier jar. par exemple, eclipse (comme la plupart dese) est capable d'exporter un fichier jar avec toutes les bibliothèques nécessaires, etc. il vous suffit donc de définir la commande de raccourci comme "java-jar filePath/file.jar " (chemin de fichiers: par exemple ./bin/fichier.jar)

 0
Author: khaos, 2016-06-19 12:36:43

Une façon d'accomplir cela est de créer un .fichier bat avec la commande: java -jar chemin/monfichier.jar" (sans les ""). Assurez-vous d'inclure le chemin du fichier sinon votre fichier ne sera pas trouvé. Bien que la question ait déjà été répondue, c'est un moyen simple de le faire.

 0
Author: MK-ULTRA, 2016-11-01 19:01:30

Vous pouvez créer votre propre fenêtre, en utilisant Swing ou Awt, en utilisant un TextPane, le seul problème... est-ce comment entrer et utiliser comme le cmd devrait le faire. Mais vous pouvez toujours le faire avec des alertes et tous...

Autrement, s'exécute directement à partir d'un fichier batch, affiché sur la console.

Vous devriez considérer aussi, faire votre jeu DIRECTEMENT sur batch... n'est pas un mauvais langage à faire et est présent sur tous les systèmes d'exploitation Windows.

(L'espoir était utile (parce que je suis nouveau), et mon anglais n'était pas si MAUVAIS QUE ça...)

 0
Author: HenryPK Developing Apps, 2017-03-14 22:07:57
  1. Utilisez Launch4j et dans l'onglet Basic, donnez votre nom exe dans le fichier de sortie, puis chargez un fichier jar dans l'onglet Jar.
  2. Allez dans l'onglet En-tête et sélectionnez Console.
  3. Puis allez dans l'onglet JRE et donnez la version JRE par exemple 1.8.0
  4. Puis cliquez sur le bouton build wrapper (type d'icône de réglage)
  5. Il vous demandera d'enregistrer un fichier xaml juste mettre un nom aléatoire et cliquez sur Enregistrer.
  6. Enfin votre .exe est créé et vous pouvez maintenant exécuter.
 0
Author: codemyway, 2017-11-15 17:20:36