在Windows上启动一个不带命令窗口的Scala Swing应用程序

我在.jar文件中有一个用Scala编写的Swing应用程序。 我用命令scala "filepath\filename.jar"创build了一个桌面快捷方式,除了它会在后台打开一个命令窗口,直到closures应用程序为止。 我想让这个消失。

我相信对于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 

但(更新桌面快捷方式之后)我仍然得到命令窗口。 有任何想法吗?


更新 :我试图添加scala-library.jar到清单,但它不工作,我猜是因为path是相对于jar的根。 其他选项似乎包括jar文件(从Scala文件创build一个jar文件)整个scala库jar,但我不认为这是一个解决scheme。

或者我可以将jar包解压到其组成的.class文件并使用快捷方式

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

但是…涉及拆开jar子。

我find的另一个半解决方法是编辑快捷方式,以使命令窗口运行最小化。


解决scheme :按照Eugener的回答,你需要使用没有 -jar选项的javaw ,但是指定jar文件例如

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

如果它是一个Swing应用程序,并且您使用了scala-swing库,那么您也需要包含它,或者像上面那样使用*通配符。

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

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开关。 也作为问题的解决方案。

你可以尝试编译你的bat文件到exe (我使用了quick batch file compiler )。 我相信这可以防止命令窗口的出现。 我很久没有使用Windows了,但是我记得它有时帮助了我。