2014-12-03 59 views
2

如何從StringTemplate中以String形式檢索編譯時錯誤消息?如何檢索StringTemplate中的錯誤消息?

比如這個代碼:

STGroup stg = new STGroup('<', '>'); 
CompiledST compiledTemplate = stg.defineTemplate("receipt", "<an invalid template<>"); 
if (compiledTemplate == null) 
    System.out.println("Template is invalid"); 

將只需登錄類似於「無效之際,一個完整的驚喜給我」,但我想在我的UI顯示此錯誤消息。

我可以通過stg.errMgr訪問ErrorManager。我期望在這裏有一個像getErrors()這樣的方法,但是這裏沒有...

回答

1

您可以爲組設置一個錯誤偵聽器,這將允許您捕獲錯誤,然後從那裏將它傳遞到UI。

This answer告訴你更多關於實現STErrorListener的信息。他們給出的例子不會編譯,因爲他們從ErrorListener中拋出檢查異常。也許更好的方法是直接在偵聽器中處理錯誤,或者您可以引發RuntimeException,以便在調用stg.defineTemplate(...)時捕獲錯誤。

public class MySTErrorListener implements STErrorListener { 
... 
@Override 
public void compileTimeError(STMessage msg) { 
    // do something useful here, or throw new RuntimeException(msg.toString()) 
} 
... 
} 

如果你扔的RuntimeException,那麼你可以抓住它,當你定義ST:

stg.setListener(new MySTErrorListener()); 
try{ 
    CompiledST compiledTemplate = stg.defineTemplate("receipt", "<an invalid template<>"); 
} catch (Exception e) 
{ 
    // tell the UI about the error 
} 
+0

THX這個工程。我仍然認爲他們有一個奇怪的錯誤偵聽器的默認實現(只是吞下異常),但幸運的是,您確實可以像這樣簡單地覆蓋它。 – wvdz 2014-12-06 13:35:52