java的setColor导致非法的参数异常或断言被跳过

时间:2019-03-26 22:17:09

标签: java exception awt

我有这段代码(从paintComponent继承的类中是从JPanel调用的。

    assert(red >= 0);
    assert(red <= 255);
    assert(green >= 0);
    assert(green <= 255);
    assert(blue >= 0);
    assert(blue <= 255);
    Color color = new Color(red, green, blue);

一段时间后,我得到一个例外:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Color parameter outside of expected range: Red
    at java.awt.Color.testColorValueRange(Unknown Source)
    at java.awt.Color.<init>(Unknown Source)
    at java.awt.Color.<init>(Unknown Source)
    at display.DrawCanvas.drawLed(DrawCanvas.java:55)
    at display.DrawCanvas.paintComponent(DrawCanvas.java:36)
    at javax.swing.JComponent.paint(Unknown Source)

DrawCanvas.java:55(第55行)是上面代码片段的最后一行。

当所有值都在0到255(包括)之间时,参数可能超出范围吗?

1 个答案:

答案 0 :(得分:1)

默认情况下不启用Java断言。

  • 从命令行传递-ea命令行标志以启用断言。

    java -ea your.main.ClassHere
    
  • 在Eclipse中,您必须转到特定的运行配置,并在{VM}中将-ea添加为described here

  • 与IntelliJ类似。在您特定的运行配置中,在“ {VM}”中添加-ea

无论使用哪种IDE,目标都是使其在-ea之后和主类名称之前添加java来启用断言。

启用断言后,它们将在获得AssertionError之前以IllegalArgumentException停止程序。

由于您已在注释中指出该值为int-267,因此此特殊情况将起作用。请注意,如果您碰巧具有float值,则它们可以传递具有大于1.0f且小于或等于255.0f的无效值的断言。