2017-08-01 57 views
0

大家好,我知道它是一個愚蠢的問題,但我正在嘗試一切。
我的遊戲服務器向我展示了一個非常長的錯誤,它對於控制檯來說太長了,並且可以看到它的頂部,但是它從我的日誌中缺失,我看不到此錯誤的詳細信息。
有人可以幫我,我怎麼能捕獲錯誤:Java顯示我長的錯誤,但在我的日誌文件中丟失

private void fix(L2PcInstance pl, int playerPoints) 
{ 
    try 
    { 
     IAchievement arc = Achievements.getInstance().GetAchivment(_id, pl.getAchivmentLevelbyId(_id) + 1); 
     if ((arc != null) && (playerPoints > arc.getNeedPoints())) 
     { 
      Achievements.getInstance().reward(pl, arc); 
      fix(pl, playerPoints); 
     } 
    } 
    catch (Exception e) 
    { 
     _log.error(getClass().getSimpleName() + ": Error in fix: " + e); 
    } 
} 

錯誤 error console

線96

fix(pl, playerPoints); 

但錯誤是從我的日誌我在想念嘗試從命令中捕獲控制檯到txt文件

java myserver.jar> capturemyc onsole.txt,但它再次顯示控制檯中的錯誤,表明txt丟失。這怎麼可能 ?感謝您的時間和幫助:) 和我的英語不好:(不好意思

+0

我們需要的味精不會截屏 –

+0

這是錯誤的錯誤太長,可以coppy只能這樣coppy在畫面 – Micr0

+0

我想這是一個計算器。你可以根據一些條件一次又一次地調用fix()。但是,你永遠不會改變那些對病情有影響的變量,所以在某些時候它會變成錯誤的。 – Lars

回答

0

你方法fix自稱,使用相同的參數,從而導致堆棧溢出...

應該做一些修改添加到參數,或者一些條件遞歸...

+0

實際上,應該有參數修改和基本情況下,所以你可以停止遞歸。 – Shirkam

+0

這種方法是固定在遊戲中的真正的名稱「修復」固定方法玩家其方法的真實姓名 – Micr0

+0

對不起,但我不明白這種方法在遊戲中的意思是固定的。您能否在bracco23的評論中嘗試一下命令並向我們展示stacktrace的根?如果這確實是一個堆棧溢出,並且程序是按照您的源代碼描述它的方式工作的,那麼您可能應該考慮整體設計,例如在循環中調用fix()而不是通過遞歸調用。 – Lars

0

你能趕上「錯誤」,而不是「例外」,然後登錄

[...] catch (Error e) 
{ 
    _log.error(getClass().getSimpleName() + ": Error in fix: " + e, e); 
} 

在您當前的代碼StackOverflowException(這不是異常的孩子)傳播而不進入catch塊。請記住添加額外的「e」參數來記錄完整的堆棧跟蹤。 這不是一個好的做法,趕上錯誤,但它會回答你的問題。

更多信息:try/catch on stack overflows in java?

相關問題