Как заставить мое приложение java открыть окно консоли / терминала?
есть ли способ сделать исполняемый файл .jar, который откроет командную строку при двойном щелчке?
Я делаю текстовую приключенческую игру. На данный момент это просто лабиринт с комнатами. В конце концов, это будет намного больше и глубже, но сейчас я просто хочу получить базовую структуру. В любом случае, чтобы сделать эту работу, я получаю выход и вход из системы.из.команда printf и java.утиль.Сканер. Пока все работает прекрасно, но . Я понял, что столкнусь с проблемой, когда попытаюсь отправить это другим людям, которые не знают, как или просто не хотят запускать программу из командной строки.
10 ответов
Если вы хотите полный контроль, вы можете реализовать окно консоли в Swing, которое делает то, что у вас есть сейчас.
Если вы не можете открыть окно сказал (Если без головы) или пользователь запрашивает его в командной строке, то просто по умолчанию для текущего поведения.
Я нашел это когда искал ответ Сам, я закончил писать этот бит:
Не уверен, что мой ответ по-прежнему актуален, но не стесняйтесь использовать его с комментарием, хранящимся в o/
единственный недостаток, о котором я могу думать, это то, что он оставляет окно cmd открытым после завершения программы.
использование: Поместите этот класс в тот же пакет, что и ваш основной класс, и установите его в качестве основного класса, он откроет окно командной строки, если он не открыт, или если он открыть запуск основного класса. Имя / расположение файла jar автоматически. Предназначен для windows, но если вы хотите его для другой системы, просто сообщите мне, и я это исправлю. (Я мог бы сделать обнаружение ОС, но я ленив и просто делаю это, чтобы я мог включить файл jar с двойным щелчком мыши моему профессору, который использует windows).
двойной щелчок на банке открывает его с любым приложением, которое вы связали с ним в вашей ОС. По умолчанию, javaw, который[.exe] обычно ассоциирован с jar files. Это двоичный файл, который работает без окна терминала. Чтобы увидеть терминал при двойном щелчке, вам нужно связать java[.exe] двоичный файл с файлами jar.
или вы можете предоставить .Ш.bat, который откроет терминал и вызовет в нем java.
пока .jar выполняется с java.exe, окно командной строки всегда будет отображаться. выполнение его с помощью javaw.exe предотвратит это.
Итак, это мое решение, я использовал код из @Brandon Barajas и изменил его. Он создает batchfile, который запускает программу сам по себе.
Если вы хотите, вы можете добавить писатель.код 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), и мой английский был не так уж плох. )
Работа с Java в командной строке
От простого к .
Каждая программа обычно содержится в отдельном каталоге. Я придерживаюсь правила создавать в этом каталоге по крайней мере две папки: src и bin. В первой содержатся исходные коды, во второй — результат компиляции. В данных папках будет структура каталогов, зависящая от пакетов.
Один файл
Можно сделать и без лишних папок.
Берем сам файл HelloWorld.java.
Переходим в каталог, где лежит данный файл, и выполняем команды.
В данной папке появится файл HelloWorld.class. Значит программа скомпилирована. Чтобы запустить
Отделяем бинарные файлы от исходников
Теперь сделаем тоже самое, но с каталогами. Создадим каталог HelloWorld и в нем две папки src и bin.
Компилируем
Здесь мы указали, что бинарные файлы будут сохраняться в отдельную папку bin и не путаться с исходниками.
Используем пакеты
А то, вдруг, программа перестанет быть просто HelloWorld-ом. Пакетам лучше давать понятное и уникальное имя. Это позволит добавить данную программу в другой проект без конфликта имен. Прочитав некоторые статьи, можно подумать, что для имени пакета обязательно нужен домен. Это не так. Домены — это удобный способ добиться уникальности. Если своего домена нет, воспользуйтесь аккаунтом на сайте (например, ru.habrahabr.mylogin). Он будет уникальным. Учтите, что имена пакетов должны быть в нижнем регистре. И избегайте использования спецсимволов. Проблемы возникают из-за разных платформ и файловых систем.
Поместим наш класс в пакет с именем com.qwertovsky.helloworld. Для этого добавим в начало файла строчку
В каталоге src создадим дополнительные каталоги, чтобы путь к файлу выглядел так: src/com/qwertovsky/helloworld/HelloWorld.java.
Компилируем
В каталоге bin автоматически создастся структура каталогов как и в src.
Если в программе несколько файлов
HelloWorld.java
Calculator.java
Adder.java
Ошибка возникла из-за того, что для компиляции нужны файлы с исходными кодами классов, которые используются (класс Calculator). Надо указать компилятору каталог с файлами с помощью ключа -sourcepath.
Компилируем
Если удивляет результат
Есть возможность запустить отладчик. Для этого существует jdb.
Сначала компилируем с ключом -g, чтобы у отладчика была информация.
Отладчик запускает свой внутренний терминал для ввода команд. Справку по последним можно вывести с помощью команды help.
Указываем точку прерывания на 9 строке в классе Calculator
Запускаем на выполнение.
Чтобы соориентироваться можно вывести кусок исходного кода, где в данный момент находится курссор.
Узнаем, что из себя представляет переменная а.
Выполним код в текущей строке и увидим, что sum стала равняться 2.
Поднимемся из класса Adder в вызвавший его класс Calculator.
Удаляем точку прерывания
Можно избежать захода в методы, используя команду next.
Проверяем значение выражения и завершаем выполнение.
Хорошо бы протестировать
Запускаем. В качестве разделителя нескольких путей в classpath в Windows используется ‘;’, в Linux — ‘:’. В консоли Cygwin не работают оба разделителя. Возможно, должен работать ‘;’, но он воспринимается как разделитель команд.
Создадим библиотеку
Класс Calculator оказался полезным и может быть использован во многих проектах. Перенесем всё, что касается класса Calculator в отдельный проект.
Измените также назавания пакетов в исходных текстах. В HelloWorld.java нужно будет добавить строку
С помощью ключа -C мы запустили программу в каталоге bin.
Надо узнать, что у библиотеки внутри
Можно распаковать архив zip-распаковщиком и посмотреть, какие классы есть в библиотеке.
Информацию о любом классе можно получить с помощью дизассемблера javap.
Из результата видно, что класс содержит кроме пустого конструктора, ещё один метод sum, внутри которого в цикле вызывается метод add класса Adder. По завершении метода sum, вызывается Adder.getSum().
Без ключа -c программа выдаст только список переменных и методов (если использовать -private, то всех).
Лучше снабдить библиотеку документацией
Изменим для этого класс калькулятора.
Документацию можно создать следующей командой. При ошибке программа выдаст список возможных опций.
В результате получиться следующее
Можно подписать jar-архив
Если требуется подписать свою библиотеку цифровой подписью, на помощь придут keytool и jarsigner.
Генерируем подпись.
Генерируем Certificate Signing Request (CSR)
Содержимое полученного файла отправляем в центр сертификации. От центра сертификации получаем сертификат. Сохраняем его в файле (например, qwertokey.cer) и импортируем в хранилище
Файл qwertokey.cer отправляем всем, кто хочет проверить архив. Проверяется он так
Использование библиотеки
Есть программа HelloWorld, которая использует библиотечный класс Calculator. Чтобы скомпилировать и запустить программу, нужно присоединить библиотеку.
Компилируем
Собираем программу
Это можно сделать по-разному.
Первый способ
Здесь есть тонкости.
В строке
не должно быть пробелов в конце.
Вторая тонкость описана в [3]: в этой же строке должен стоять перенос на следующую строку. Это если манифест помещается в архив сторонним архиватором.
Программа jar не включит в манифест последнюю строку из манифеста, если в конце не стоит перенос строки.
Ещё момент: в манифесте не должно быть пустых строк между строками. Будет выдана ошибка «java.io.IOException: invalid manifest format».
При использовании команды echo надо следить только за пробелом в конце строки с main-class.
Второй способ
В данном способе избегаем ошибки с пробелом в main-class.
Третий способ
Включили код нужной библиотеки в исполняемый файл.
Запуск исполняемого jar-файла
Файл calculator.jar исполняемым не является. А вот helloworld.jar можно запустить.
Если архив был создан первыми двумя способами, то рядом с ним в одном каталоге должна находится папка lib с файлом calculator.jar. Такие ограничения из-за того, что в манифесте в class-path указан путь относительно исполняемого файла.
При использовании третьего способа нужные библиотеки включаются в исполняемый файл. Держать рядом нужные библиотеки не требуется. Запускается аналогично.
Как быть с приложениями JavaEE
Аналогично. Только библиотеки для компиляции нужно брать у сервера приложений, который используется. Если я использую JBoss, то для компиляции сервлета мне нужно будет выполнить примерно следующее
Структура архива JavaEE-приложения должна соответствовать определенному формату. Например
Способы запуска приложения на самом сервере с помощью командной строки для каждого сервера различны.
Надеюсь, данная статья станет для кого-нибудь шпаргалкой для работы с Java в командной строке. Данные навыки помогут понять содержание и смысл Ant-скриптов и ответить на собеседовании на более каверзные вопросы, чем «Какая IDE Вам больше нравится?».
Java console application
last modified July 6, 2020
Java console application tutorial shows how to create a Java console application. The application computes some statistics.
Java console example
The following example creates a Java console application which reads data from a CSV file and computes some basic statistics.
The example uses Apache Commons libraries to parse command line arguments, do math, and transform data. The OpenCSV library is used to read CSV data.
This is the data file. The file name will be a console parameter to our program.
This is the project structure.
In the pom.xml file, we define the dependencies of the application. The commons-cli artifact is for parsing command line arguments, opencsv for reading CSV data, commons-math for statistical calculations, and commons-lang3 for transforming list into an array.
The exec-maven-plugin executes Java programs from Maven. In the arguments tag, we give the application the option and the filename.
JavaStatsEx is the application entry point. It creates the instance of MyStatsApp and passes it the application arguments.
This is MyStatsApp .
The parseArguments() method parses the command line arguments. It returns CommandLine , which represents a list of arguments parsed against a Options descriptor.
The application has a mandatory filename option, which points to the file to be read and compute statistics from. If it is not present, we provide the application help message.
The getOptions() method returns the options of the application.
CommandLineParser parses the command line arguments. The application exits if there is a ParseException . The parser returns parsed arguments in CommandLine object.
CSVReader is used to read CSV data.
In this while loop, we read the CSV file line by line and parse the data into a list of Double values.
We need primitive data types to calculate the statistics; therefore, we transform the list into an array of primitive double values. ArrayUtils comes from the Apache Commons Lang library.
The getOptions() provides the application options.
The printAppHelp() prints the help of the application. It uses HelpFormatter to do the job.
With StatUtils() , we compute some statistics. The StatUtils() takes a Java array as a parameter.
This is the output.
In this tutorial, we have created a simple Java console application, which computes basic statistics from a CSV file.