web-dev-qa-db-fra.com

Comment faire que mon application Java ouvre une fenêtre console/terminal?

Est-il possible de créer un fichier .jar exécutable qui ouvrira la ligne de commande lorsque vous double-cliquez dessus?

Je fais un jeu d'aventure à base de texte. Pour l'instant, ce n'est qu'un labyrinthe avec des chambres. Finalement, il sera beaucoup plus grand et plus en profondeur, mais pour le moment, je veux juste obtenir la structure de base. Quoi qu'il en soit, pour que cela fonctionne, la sortie et les entrées de la commande System.out.printf et de Java.util.Scanner ont été générées. Tout fonctionne à merveille jusqu'à présent, mais j'ai réalisé que je vais rencontrer un problème lorsque j'essaie d'envoyer ceci à d'autres personnes qui ne savent pas comment ou qui ne veulent tout simplement pas exécuter le programme à partir de la ligne de commande.

10
CaldwellYSR

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

Si vous ne pouvez pas ouvrir cette fenêtre (si vous n’êtes pas connecté) ou si l’utilisateur vous le demande en ligne de commande, il vous suffit de modifier votre comportement actuel.

J'ai trouvé ceci 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 d'actualité, 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 package que votre classe principale et définissez-la comme classe principale. Une fenêtre d'invite de commande s'ouvrira si aucune n'est ouverte ou si elle est ouverte, lancez la classe principale. Le nom/emplacement du fichier jar est automatique. Conçu pour Windows, mais si vous le souhaitez pour un autre système, envoyez-moi un message et je le corrigerai. (Je pourrais faire la détection du système d'exploitation, mais je suis paresseux et je le fais simplement pour pouvoir transmettre un fichier jar double-clic à mon professeur qui utilise Windows).

13
Brandon Barajas

Un double-clic sur un fichier jar 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 binaire Java [.exe] à des fichiers jar.

4
Ryan Stewart

Vous pouvez également fournir un fichier .sh .bat qui ouvre un terminal et appelle votre Java.

2
YMomb

C'est donc ma solution. J'ai utilisé le code de @Brandon Barajas et je l'ai modifié. Il crée un fichier de commandes qui démarre le programme 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 writer.println ("pause"); avant l’impression "exit", pour garder la fenêtre ouverte à la fin du programme. Ensuite, vous devez appuyer sur ET ENTRER pour fermer la fenêtre.

1
Frezze98 bolalo

Tant que le fichier .jar est exécuté avec Java.exe, une fenêtre de ligne de commande apparaîtra toujours. 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
Simiil

Pour ce faire, vous pouvez créer un fichier .bat à l'aide de la commande "Java -jar filePath/yourfile.jar" (sans ""). 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, il s'agit d'un moyen simple de le faire.

0
MK-ULTRA

Je suppose que le moyen le plus simple est d'écrire un raccourci simple pour votre fichier jar. par exemple. Eclipse (comme la plupart des idées) 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 telle que "Java -jar cheminFichier/fichier.jar" (cheminFichier: .pot)

0
khaos

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

Autrement, il s’exécute directement à partir d’un fichier de commandes et s’affiche sur la console.

Vous devez également envisager de créer votre jeu DIRECTEMENT par lots… n’est pas un mauvais langage à créer et est présent sur tous les systèmes d’exploitation Windows.

(Hope était utile (parce que je suis nouvelle), et mon anglais n'était pas si mauvais que ça ...)

  1. Utilisez Launch4j et dans Basic Tab, donnez votre nom exe dans le fichier de sortie, puis chargez un fichier JAR dans Jar Tab. 
  2. Allez à l'onglet En-tête et sélectionnez Console.
  3. Ensuite, allez à l’onglet JRE et donnez la version de JRE, par exemple 1.8.0
  4. Cliquez ensuite sur le bouton Construire (type d’icône de réglage)
  5. Il vous demandera de sauvegarder un fichier xaml, mettez juste un nom aléatoire et cliquez sur sauvegarder.
  6. Enfin, votre fichier .exe est créé et vous pouvez exécuter maintenant.
0
codemyway