2011-09-10 53 views
10

我有一個用Scala編寫的Swing應用程序.jar文件。我製作了一個桌面快捷方式,其命令爲scala "filepath\filename.jar",它的工作原理是,除非它關閉應用程序之前首先會顯示一個位於後臺的命令窗口。我想讓這個消失。在沒有命令窗口的Windows上啓動Scala Swing應用程序

我相信對於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的清單,但它不工作,我猜是因爲路徑是相對於JAR的根。其他選項似乎包括jar文件(Creating a jar file from a Scala file)內的整個scala-library jar,但我不認爲這是一個解決方案。

或者,我可以解壓的jar其組成.class文件,並使用快捷

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

但是......涉及拆包罐子。

Ive發現的另一個半解決方法是編輯快捷方式,以使命令窗口最小化。


解決方案:按eugener的答案,你需要使用javaw沒有 -jar選項,但如指定的jar文件

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

如果它是一個Swing應用程序,並且您使用scala-swing庫,您將需要包括爲好,或使用通配符*如上。

回答

4

我會建議直接使用javaw啓動您的應用程序。由於Scala與Java編譯成相同的字節碼 - 你可以這樣做。不要忘了將標準的scala庫添加到類路徑

+0

但如果你推出一個'jar'類路徑必須已經在清單? –

+0

您可以使用清單或使用-cp參數來描述您的班級路徑,這更靈活IMO –

+1

如果您同時使用-cp和-jar,則忽略-cp設置 –

0

您可以嘗試編譯您的bat文件到exe(我使用quick batch file compiler)。我相信這可以防止命令窗口的出現。我很長時間沒有使用Windows,但我記得它有時幫助了我。

1

它在java command explanation明確指出,約-jar

當您使用此選項,JAR文件是所有用戶類的源,和其他用戶類路徑設置將被忽略。

製作與快捷方式 javaw.exe的-cp 「%SCALA_HOME%\ lib中\階-library.jar」; 「%SCALA_HOME%\ lib中\階-swing.jar」;「C:/路徑/ yourjar.jar「packageName.mainClassName 確實有效。

因此,解決方案包含庫+帶有-cp參數的打包目標代碼,並且不要使用-jar開關。這也是問題的解決方案。

相關問題