Запустите приложение Scala Swing в Windows без командного окна

У меня есть приложение Swing, написанное в Scala в файле .jar. Я сделал ярлык на рабочем столе с помощью команды scala "filepath\filename.jar", которая работает, за исключением того, что она вызывает сначала окно команд, которое находится в фоновом режиме, пока я не закрою приложение. Я хочу, чтобы это исчезло.

Я считаю, что для Java вы должны использовать javaw вместо java для этой цели. Я попытался скопировать файл scala.bat в новый файл с именем scalaw.bat to и сменить строку 24 на

if exist "%JAVA_HOME%\bin\javaw.exe" set "_JAVACMD=%JAVA_HOME%\bin\javaw.exe" 

а строка 28 -

if "%_JAVACMD%"=="" set _JAVACMD=javaw

но (после обновления ярлыка на рабочем столе) я все равно получаю окно командной строки. Любые идеи?


Обновить. Я попытался добавить scala-library.jar в манифест, но он не работает, я думаю, потому что пути относятся к корню jar. Другой вариант, по-видимому, включает в себя весь scala -библиотеку jar в файле jar (создание файла jar из файла Scala), но я не рассмотрим это решение.

Или я могу распаковать банку на ее составные .class файлы и использовать ярлык

javaw.exe -cp "%SCALA_HOME%/lib/scala-library.jar";"filepath\\" packageName.className

но... который включает распаковку банки.

Еще одно обнаруженное решение - это отредактировать ярлык так, чтобы оно окончилось с минимальным значением.


Решение: в соответствии с ответом eugener вам нужно использовать javaw без параметра -jar, но указав jar файл, например.

javaw -cp "%SCALA_HOME%/lib/*";"C:/path/yourjar.jar" packageName.className

Если это приложение Swing, и вы используете библиотеку scala-swing, вам также необходимо включить его, либо используйте подстановочный знак *, как указано выше.

Ответ 1

Я бы посоветовал запустить приложение напрямую с помощью javaw. Поскольку Scala компилируется в тот же самый байтовый код, что и Java, вы можете это сделать. Не забудьте добавить стандартные Scala библиотеки в путь класса

Ответ 2

Это четко указано в java объяснении команды, о -jar:

Когда вы используете этот параметр, JAR файл является источником всех пользовательских классов, а другие параметры пути к пользовательскому классу игнорируются.

Создание ярлыка с javaw.exe -cp "% SCALA_HOME%\lib\scala -library.jar"; "% SCALA_HOME%\lib\scala -swing.jar"; "C:/path/yourjar.jar" packageName.mainClassName сделал работа.

Таким образом, решение включает библиотеки + пакетный целевой код с аргументом -cp и не использует переключатель -jar. Как также дано как решение в вопросе.

Ответ 3

Вы можете попытаться скомпилировать ваш файл bat в exe (я использовал quick batch file compiler). Я считаю, что это предотвращает появление командного окна. Я долгое время не пользовался Windows, но я помню, что это помогало мне иногда.