0

У меня есть .jar файл, чтобы бежать, но я хочу работать в более практичный способ без упоминания «Java» или «Java -cp-бла-бла»предложение запустить опарника в практическом плане

В настоящее время, мне нужно работать мой jar-файл с помощью «java -cp \ MyProgram.jar [arguments]

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

Thanks

+0

Запуск процесса Java без вызова 'java' где-то звучит не удалось мне. –

+0

Возможно, если вы установите программу по умолчанию для открытия файла jar в java или скрипта на уровне ОС. Но это не переносится на другие компьютеры, где вам нужно продолжить ту же конфигурацию. –

+0

Да создайте командный файл или командный файл. Или вы делаете исполняемый JAR-файл, чтобы вы могли дважды щелкнуть по нему. http://stackoverflow.com/questions/5258159/how-to-make-an-executable-jar-file –

ответ

0

Хорошо закодированный командный файл - хорошее решение для простого запуска приложения Java.

Вот пример с некоторыми строками комментариев:

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 
title MyProgram 
if "%~1" == "/?" goto ShowHelp 

rem Try to find java.exe in current folder or any folder defined in 
rem environment variable PATH as Windows command interpreter would do. 

set "SearchPath=%CD%;%PATH%" 
set "SearchPath=%SearchPath:)=^)%" 
set "SearchPath=%SearchPath:\;=;%" 
for /F "delims=" %%I in ('echo %SearchPath:;=^&ECHO %') do (
    if exist "%%~I\java.exe" (
     set "JavaPath=%%~I" 
     goto RunMyProgram 
    ) 
) 

echo %~dpn0 
echo. 
echo Error: Failed to find java.exe in current folder or 
echo  any folder defined in environment variable PATH. 


:GetJavaPath 
echo. 
echo Please enter path to folder with java.exe. 
echo. 
echo Enter nothing to exit if Java is not installed at all. 
echo. 

set "JavaPath=" 
set /P "JavaPath=Path to java.exe: " 

rem Has the user entered a folder path at all? 
if "!JavaPath!" == "" goto BatchExit 

rem Remove all double quotes from entered folder path. 
set "JavaPath=!JavaPath:"=!" 

rem Replace all/by \ in entered folder path. 
set "JavaPath=!JavaPath:/=\!" 

rem If there is a backslash at end, remove this backslash. 
if "!JavaPath:~-1!" == "\" set "JavaPath=!JavaPath:~0,-1!" 

rem Does java.exe exist in entered folder path? 
if exist "!JavaPath!\java.exe" goto RunMyProgram 

echo. 
echo There is no java.exe in entered folder. 
goto GetJavaPath 


:ShowHelp 
echo For using this application ... 

echo. 
pause 
goto BatchExit 


:RunMyProgram 
echo. 
"%JavaPath%\java.exe" -cp "%~dp0MyProgram.jar" %* 


:BatchExit 
endlocal 

Вся партия код использует свою собственную среду, определенную с SETLOCAL и Endlocal. Прочтите ответ на change directory command cd ..not working in batch file after npm install для получения подробного объяснения, что делают эти две команды.

В третьей строке указано название консольного приложения, которое должно быть отредактировано в соответствии с тем, что, по вашему мнению, будет хорошо для вашего Java-приложения.

Стандартный параметр для получения справки по командному или консольному приложению в Windows работает с параметром /?. Поэтому код партии проверяет, равен ли первый параметр /?, и в этом случае выводит помощь, которую вы должны написать для своего приложения под меткой ShowHelp.

Далее командный файл ищет в текущем каталоге и во всех каталогах, определенных в переменной окружения PATH для java.exe. Ожидается, что исполняемый файл Java можно будет найти автоматически, и поэтому ваше приложение Java может быть выполнено следующим образом без какого-либо взаимодействия с пользователем. Эта часть кода представляет собой слегка измененную версию кода, написанную Magoo в его ответе на Find the path used by the command line when calling an executable.

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

Пользователь имеет возможность ввести вручную или перетащить путь в папку, содержащую java.exe.

Нажатием только RETURN или ENTER пользователь может выйти из пакетного файла в случае признания того, что Java не установлена ​​на всех, и, следовательно, приложение Java не может быть использован этим пользователем.

В противном случае возможно окружающий двойные кавычки удаляются из введенного пути к папке, прямые косые черты заменяются обратными косыми чертами, как многие пользователи используют / вместо \\ на Windows, по ошибке, и последний символ введенного пути к папке также удаляются в случае пути к папке заканчивается обратным слэшем.

Следующая страница проверяется, если java.exe действительно существует в папке, введенной пользователем.

Примечание: В случае пользователь вводит, например "\" переменная окружения JavaPath больше не существует на проверки существования файла, но это не имеет никакого значения. Введенный путь к папке ссылается на замедленное расширение, чтобы предотвратить выход из обработки пакетного файла из-за синтаксической ошибки в случае, если пользователь допустил ошибку ввода при вводе пути к папке, что приведет к немедленному расширению переменной в синтаксической ошибке.

Ожидается, что этот командный файл MyProgram.jar находится в том же каталоге, что и сам командный файл. %~dp0 ссылается на диск и путь к пакетному файлу. Эта строка всегда заканчивается обратным слэшем, что является причиной отсутствия обратной косой черты между %~dp0 и MyProgram.jar.

%~dp0MyProgram.jar заключен в двойные кавычки, потому что пользователь мог извлечь ваше приложение Java и пакетный файл в папку, имя или путь которой содержит 1 или даже больше пробелов.

%* ссылается на все аргументы (параметры, параметры), переданные пакетному файлу для пересылки их в ваше Java-приложение.

Чтобы понять используемые команды и как они работают, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.

  • call /? ... %~1 объясняет, %~dp0, %dpn0 и %*
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • pause /?
  • rem /?
  • set /?
  • setlocal /?
  • title /?
+0

Это действительно полезный ответ для меня. Спасибо большое! – goutthee