【问题标题】:How to change the Exception message thrown by java standard class?如何更改java标准类抛出的异常信息?
【发布时间】:2021-03-18 04:08:01
【问题描述】:

在我创建的使用 AWT 标准类的应用程序中,对 Color 构造函数的调用会引发以下异常消息:

运行:

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)

有没有办法改变这个消息(包括在这种情况下红色组件的值)?

我想定义一个新类NewColor,它扩展Color并在构造函数中抛出修改后的异常,但是新类构造函数必须以调用super(red, green, blu)开始,因此调用标准testColorValueRange(int r, int g, int b, int a)并抛出标准异常。

感谢您的帮助。

【问题讨论】:

  • 你总是可以捕捉到异常。否则你可以修改核心类中的字节码,这会吓到我。
  • 您不能让 Java 在 JDK 代码中使用您的 NewColor 类,您只会在您自己创建的实例中收到新消息。另外,testColorValueRange 似乎是private,所以无论如何你都不能覆盖它。为什么不只记录您传递给引发异常的构造函数的参数?
  • 你在哪里打电话new Color()?您不能在创建对象之前检查值吗?还是只使用调试器?
  • 你为什么要做这样的事情?
  • 在这里查看我的答案stackoverflow.com/questions/56840409/…

标签: java exception


【解决方案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 中设置所需的值。

【讨论】:

    【解决方案2】:

    您应该能够在测试值范围时捕获异常,并在那里输出带有 r、g、b 和 a 值的错误消息。

    或者您可以在调试器中遍历代码并以这种方式验证值。

    【讨论】:

      【解决方案3】:

      在我看来,定义一个扩展颜色的新类将是修改异常类型的最佳方法。它将红色的范围限制在 0 到 255 之间是有原因的。如果您尝试覆盖它,那么您可能必须稍后再覆盖一些逻辑来纠正它。

      【讨论】:

        猜你喜欢
        • 2020-10-06
        • 1970-01-01
        • 1970-01-01
        • 2011-02-07
        • 2021-04-23
        • 2010-10-05
        • 1970-01-01
        • 2014-03-15
        • 1970-01-01
        相关资源
        最近更新 更多