Как мне сделать, чтобы мое приложение Java открыло окно консоли / терминала? - PullRequest
10 голосов
/ 09 октября 2011

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

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

Ответы [ 10 ]

14 голосов
/ 19 марта 2015

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

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

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

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

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

6 голосов
/ 09 октября 2011

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

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

4 голосов
/ 09 октября 2011

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

2 голосов
/ 09 октября 2011

Или вы можете предоставить .sh .bat, который откроет терминал и вызовет в нем вашу Java.

1 голос
/ 28 апреля 2018

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

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

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

1 голос
/ 09 октября 2011

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

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

0 голосов
/ 15 ноября 2017
  1. Используйте Launch4j и на вкладке «Основные» задайте имя exe-файла в «Выходном файле», а затем загрузите файл JAR во вкладке «Jar».
  2. Перейдите на вкладку «Заголовок» и выберите «Консоль».
  3. Затем перейдите на вкладку JRE и введите версию JRE, например, 1.8.0
  4. Затем нажмите кнопку сборки оболочки (вид значка настройки)
  5. Он попросит вас сохранить файл xaml, просто введите произвольное имя и нажмите «Сохранить».
  6. Наконец, ваш .exe создан, и вы можете его запустить.
0 голосов
/ 15 марта 2017

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

Другой способ - запуск непосредственно из командного файла, отображаемого на консоли.

Вам также следует подумать, сделайте свою игру ПРЯМОв пакетном режиме ... не плохой язык, чтобы сделать и присутствует в каждой операционной системе Windows.

(Надежда была полезна (потому что я новичок), и мой английский не был ЭТО ПЛОХО ...)

0 голосов
/ 01 ноября 2016

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

0 голосов
/ 19 июня 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...