Java 在没有命令窗口的Windows上启动Scala Swing应用程序

Java 在没有命令窗口的Windows上启动Scala Swing应用程序,java,windows,swing,scala,jar,Java,Windows,Swing,Scala,Jar,我在.jar文件中用Scala编写了一个Swing应用程序。我使用命令scala“filepath\filename.jar”创建了一个桌面快捷方式,它可以正常工作,只是它会首先打开一个命令窗口,该窗口位于后台,直到我关闭应用程序。我想让这一切消失 我相信对于Java,您应该使用javaw而不是Java来实现这一目的。我尝试将scala.bat文件复制到名为scalaw.bat的新文件中,并将第24行更改为 if exist "%JAVA_HOME%\bin\javaw.exe" set "_J

我在
.jar
文件中用Scala编写了一个Swing应用程序。我使用命令
scala“filepath\filename.jar”
创建了一个桌面快捷方式,它可以正常工作,只是它会首先打开一个命令窗口,该窗口位于后台,直到我关闭应用程序。我想让这一切消失

我相信对于Java,您应该使用
javaw
而不是
Java
来实现这一目的。我尝试将
scala.bat
文件复制到名为
scalaw.bat
的新文件中,并将第24行更改为

if exist "%JAVA_HOME%\bin\javaw.exe" set "_JAVACMD=%JAVA_HOME%\bin\javaw.exe" 
第28行至

if "%_JAVACMD%"=="" set _JAVACMD=javaw
但是(在更新桌面快捷方式之后)我仍然会看到命令窗口。有什么想法吗


Update:我尝试将
scala library.jar
添加到清单中,但没有效果,我想是因为路径是相对于jar的根的。其他选项似乎包含JAR文件中的整个Scala库jar,但我不认为这是一个解决方案。 或者我可以将jar解压到其组成的
.class
文件中,并使用快捷方式

javaw.exe-cp“%SCALA\u HOME%/lib/SCALA library.jar”;“文件路径\\”packageName.className

但是。。。这包括打开罐子的包装

我发现的另一个半解决方法是编辑快捷方式,使其在命令窗口中最小化


解决方案:根据eugener的回答,您需要使用
javaw
而不使用-jar选项,但需要指定jar文件,例如

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

如果它是一个Swing应用程序,而您使用的是
scala Swing
库,那么您也需要包含该库,或者如上所述使用
*
通配符。

我建议直接使用javaw启动您的应用程序。因为Scala编译成与Java相同的字节码,所以您可以这样做。不要忘记将标准scala库添加到类路径

您可以尝试将
bat
文件编译为
exe
(我使用了
快速批处理文件编译器
)。我相信这会阻止命令窗口的出现。我很长时间没有使用Windows,但我记得它有时对我有帮助。

关于
-jar
:

使用此选项时,JAR文件是所有用户类的源,其他用户类路径设置将被忽略

走捷径 javaw.exe-cp“%SCALA\u HOME%\lib\SCALA library.jar”;“%SCALA\u HOME%\lib\SCALA swing.jar”;“C:/path/yourjar.jar”packageName.mainClassName 确实有效


因此,解决方案是使用
-cp
参数包含库+打包的目标代码,并且不使用
-jar
开关。正如问题中给出的解决方案一样。

但是如果您要启动一个
jar
类路径必须已经在清单中?您可以使用清单或使用-cp参数描述您的类路径,如果同时使用-cp和-jar,那么-cp设置将从快捷方式忽略,使快捷方式指向javaw.exe,参数指向您的jar、类路径等。。。您必须通过指定主类和完整类路径(包括scala-library.jar)作为普通java程序启动,而不使用-jar arg