2013-07-04 71 views
0

時,當我開始我的bat文件:錯誤運行Java bat文件

@echo off 
title x 
:start 
echo. 
java -server -Dfile.encoding=UTF-8 -Xms64m -Xmx64m -Xbootclasspath/p:../libs/l2ft.jar - cp config/xml;../libs/*; l2ft.loginserver.AuthServer 
if ERRORLEVEL 2 goto restart 
if ERRORLEVEL 1 goto error 
goto end 
:restart 
echo Restarted ... 
goto start 
:error 
echo Terminated abnormaly ... 
:end 
echo Terminated ... 

我得到奇怪的錯誤:

Error occurred during initialization of VM 
java.nio.charset.UnsupportedCharsetException: UTF-8 
    at java.nio.charset.Charset.forName(Unknown Source) 
    at java.nio.charset.Charset.defaultCharset(Unknown Source) 
    at sun.nio.cs.StreamEncoder.forOutputStreamWriter(Unknown Source) 
    at java.io.OutputStreamWriter.<init>(Unknown Source) 
    at java.io.PrintStream.<init>(Unknown Source) 
    at java.io.PrintStream.<init>(Unknown Source) 
    at java.lang.System.initializeSystemClass(Unknown Source) 

我曾嘗試重新安裝的Java JDK,我已經得到了默認編碼在bat文件中已經:-Dfile.encoding = UTF-8,所以我不知道問題的解決方案是什麼。

+0

爲什麼你需要設置bootclasspath?你只需要用-cp –

+0

來設置類路徑哦,我實際上並不確定,那只是我正在運行的代碼。我確定bat文件本身和隱藏在它後面的jar文件工作得很好,我已經在另一臺pc上測試了它們。與PC的東西是錯的,我只是不知道如何解決它。 – user1656546

+0

您的連字符是否可能被連字符替換? –

回答

0

它看起來像你的Java不支持UTF-8,這真的很奇怪,因爲每個Java都應該支持它,根據documentation of the Charset class

嘗試運行此代碼以確保UTF-8確實不受支持。

import java.nio.charset.Charset; 

public class TestCharset { 
    public static void main(String[] args) { 
     System.out.println(Charset.forName("UTF-8")); 
    } 
} 

如果UTF-8不支持,它應該拋出異常。

您也可以用UTF8而不是UTF-8來嘗試,以防萬一您使用了不正確的連字符。 UTF-8根據規格是正確的,但UTF8也適用於我的機器。

+0

我沒有得到異常,UTF-8是結果。 – user1656546

+0

這真的很奇怪,因爲你從相同的方法獲得異常 - 'Charset.forName '我能想到的唯一原因就是你使用了一個不正確的連字符,請用'UTF8'試試或者在'UTF-8'中刪除連字符並再次輸入以確保它是正確的字符 –

+0

在我的TestCharset類中,我得到了UTF-8消息,即使我在Charset.forName()方法中使用了「UTF8」字符串,在bat文件中,我在使用UTF-8或UTF8時出錯。之間2 :) – user1656546

0

我不確定你的p:../ libs/l2ft.jar,那不是正確的路徑。嘗試用它來取代當前的行:

java -server -Dfile.encoding=UTF-8 -Xms64m -Xmx64m -cp p:../libs/l2ft.jar;config/xml;../libs/* l2ft.loginserver.AuthServer 

只是一定要更換:與其中l2ft.jar駐留在正確的路線「P ../庫/ l2ft.jar」。

+0

現在得到這個錯誤:啓動LoginServer。 線程「main」中的異常java.lang.ClassFormatError:類文件中常量池中的非法UTF8字符串l2ft/loginserver/AuthServer – user1656546

+0

您的程序現在已啓動。嘗試閱讀這個http://www.coderanch.com/t/322531/java/java/Illegal-UTF-string-constant-pool –

+0

我想你的類文件編譯級別和正在運行的jvm之間是不匹配的你的課程。你用什麼版本的jdk來編譯?什麼是現在運行你的compliled類的jvm的版本? –

1

我找到了解決方案。在包含AuthServer的jar中,有很多UTF-8不支持的俄文字符。刪除每個字符並重新編譯後,問題就消失了。我的朋友的Jar文件也包含這些角色,但它的工作沒有問題。我不知道如何,但現在並不重要,因爲問題沒有了。

+0

「UTF-8不支持的很多俄羅斯字符」 - 我不知道這是可能的,除非Unicode.org錯過了它們!它實際上聽起來像你的文件不是UTF-8編碼,但你的朋友文件是。 –