Как заставить мое приложение java открыть окно консоли / терминала?

есть ли способ сделать исполняемый файл .jar, который откроет командную строку при двойном щелчке?

Я делаю текстовую приключенческую игру. На данный момент это просто лабиринт с комнатами. В конце концов, это будет намного больше и глубже, но сейчас я просто хочу получить базовую структуру. В любом случае, чтобы сделать эту работу, я получаю выход и вход из системы.из.команда printf и java.утиль.Сканер. Пока все работает прекрасно, но ... Я понял, что столкнусь с проблемой, когда попытаюсь отправить это другим людям, которые не знают, как или просто не хотят запускать программу из командной строки.

10 ответов


Если вы хотите полный контроль, вы можете реализовать окно консоли в Swing, которое делает то, что у вас есть сейчас.

Если вы не можете открыть окно сказал (Если без головы) или пользователь запрашивает его в командной строке, то просто по умолчанию для текущего поведения.


Я нашел это когда искал ответ Сам, я закончил писать этот бит:

/**
 * 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");
        }
    }
}

Не уверен, что мой ответ по-прежнему актуален, но не стесняйтесь использовать его с комментарием, хранящимся в o/

единственный недостаток, о котором я могу думать, это то, что он оставляет окно cmd открытым после завершения программы.

использование: Поместите этот класс в тот же пакет, что и ваш основной класс, и установите его в качестве основного класса, он откроет окно командной строки, если он не открыт, или если он открыть запуск основного класса. Имя / расположение файла jar автоматически. Предназначен для windows, но если вы хотите его для другой системы, просто сообщите мне, и я это исправлю. (Я мог бы сделать обнаружение ОС, но я ленив и просто делаю это, чтобы я мог включить файл jar с двойным щелчком мыши моему профессору, который использует windows).


двойной щелчок на банке открывает его с любым приложением, которое вы связали с ним в вашей ОС. По умолчанию, javaw, который[.exe] обычно ассоциирован с jar files. Это двоичный файл, который работает без окна терминала. Чтобы увидеть терминал при двойном щелчке, вам нужно связать java[.exe] двоичный файл с файлами jar.


или вы можете предоставить .Ш.bat, который откроет терминал и вызовет в нем java.


пока .jar выполняется с java.exe, окно командной строки всегда будет отображаться. выполнение его с помощью javaw.exe предотвратит это.

для дальнейшего чтения: http://download.oracle.com/javase/1.4.2/docs/tooldocs/windows/java.html


Итак, это мое решение, я использовал код из @Brandon Barajas и изменил его. Он создает batchfile, который запускает программу сам по себе.

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...
    }
}

Если вы хотите, вы можете добавить писатель.код println("пауза"); до "выход" печать, чтобы держать окно открытым после завершения работы программы. Тогда вам нужно ударить ENTER, чтобы закрыть окно.


Я думаю, самый простой способ-это написать простой ярлык для файла jar. например, eclipse (как и большинство ide) может экспортировать файл jar со всеми необходимыми библиотеками и т. д. поэтому вам просто нужно установить команду быстрого доступа, такую как " java-jar filePath/file.jar "(filePath: например ./ bin / file.jar)


один из способов сделать это-создать a .файл bat с командой: "java - jar filePath / yourfile.баночку" (без ""). Обязательно укажите путь к файлу, иначе ваш файл не будет найден. Хотя на вопрос уже был дан ответ, это простой способ сделать это.


вы можете создать свое собственное окно, используя Swing или Awt, используя TextPane, единственная проблема... как вводить и использовать, как должен делать cmd. Но вы всегда можете сделать это с предупреждениями и все...

другой способ, работает непосредственно из пакетного файла, показывая на консоли.

вы должны рассмотреть тоже, сделать вашу игру непосредственно на партии... не плохой язык и присутствует на всех операционных системах Windows.

(Надежда была полезна (потому что я new), и мой английский был не так уж плох...)


  1. используйте Launch4j и на вкладке Basic Укажите имя exe в выходном файле, а затем загрузите файл jar на вкладке Jar.
  2. перейдите на вкладку заголовок и выберите консоль.
  3. затем перейдите на вкладку JRE и дайте версию JRE e.g 1.8.0
  4. затем нажмите кнопку build wrapper (вид значка настройки)
  5. он попросит вас сохранить файл xaml просто поместите случайное имя и нажмите кнопку Сохранить.
  6. наконец-то ваш .exe создан, и вы можете запустить сейчас.