2012-01-16 25 views
1

在應用程序中我提出使用AWT標準類,以顏色的呼叫構造引發以下異常消息:如何更改java標準類引發的Exception消息?

運行:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Color parameter outside of expected range: Red 
    at java.awt.Color.testColorValueRange(Color.java:310) 
    at java.awt.Color.<init>(Color.java:395) 
    at java.awt.Color.<init>(Color.java:369) 
    at mandelbrotset.DrawingArea.translateColor(DrawingArea.java:106) 
    at mandelbrotset.DrawingArea.drawMandelbrotSet(DrawingArea.java:75) 
    at mandelbrotset.DrawingArea.paintComponent(DrawingArea.java:45) 
    at javax.swing.JComponent.paint(JComponent.java:1054) 

有任何方法來改變這種消息(包括在此情況下紅色分量的值)?

我想定義擴展Color並引發在構造函數中修改異常的新類NewColor的,但新類的構造函數必須調用開始super(red, green, blu)等標準testColorValueRange(int r, int g, int b, int a)被稱爲和標準的異常被拋出。

感謝您的任何幫助。

+0

你總是可以發現異常。否則,你可以修改字節碼,這在覈心類中會嚇到我。 – 2012-01-16 15:05:57

+0

您不能讓Java在JDK代碼中使用您的'NewColor'類,只會爲您自己創建的實例獲取新消息。此外,'testColorValueRange'似乎是'private',所以無論如何你都不能覆蓋它。爲什麼不只是記錄你傳遞給引發異常的構造函數的參數? – millimoose 2012-01-16 15:07:23

+0

你在哪裏調用'new Color()'?你不能在創建對象之前檢查值嗎?或者只是使用調試器? – Viruzzo 2012-01-16 15:08:26

回答

1

捕獲不需要的異常並拋出所需的異常。 事情是這樣的:

try 
{ 
    blah; // throws the unwanted exception. 
} 
catch (UnwantedExceptionType exception) 
{ 
    throw new DesiredException(exception); // option 1. 
    // or 
    throw new DesiredException(new info, exception) // option 2. 
} 

您可以創建一個新的異常類(DesiredException在上面的例子),其採用現有的例外和「變化」的價值觀,以你想要的。

也可能(在上面的代碼中)UnwantedExceptionType和DesiredException是相同的類型,您只需在DesiredException中設置所需的值。

0

您應該能夠在測試值範圍時捕獲異常,並在那裏輸出錯誤消息,其中包含r,g,b & a的值。

或者你可以遍歷調試器中的代碼並驗證這些值。

0

在我看來,定義一個擴展顏色的新類將是修改異常類型的最佳方法。有一個原因是它將紅色範圍限制在0到255之間。如果你試圖覆蓋這個範圍,那麼你可能不得不稍後重寫一些更多的邏輯來糾正。