我在.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了,但是我记得它有时帮助了我。