首页 > 解决方案 > java的setColor导致非法参数异常或断言被跳过

问题描述

我有这段代码(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(包括)之间时,一个参数怎么可能超出范围?

标签: javaexceptionawt

解决方案


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

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

    java -ea your.main.ClassHere
    
  • 从 Eclipse 中,您必须转到您的特定运行配置并添加-ea您的“VM 参数”,如此处所述

  • 从 IntelliJ,它是相似的。在您的特定运行配置中,添加-ea“VM 选项”。

无论您的 IDE 是什么,目标都是让它在您的主类名-ea之后java和之前添加以启用断言。

一旦你启用了断言,它们就会AssertionError在你获得IllegalArgumentException.

这种特殊情况将起作用,因为您在评论中指出该值为int-- 267。请注意,如果您碰巧有float值,那么它们可能会传递具有大于1.0f、小于或等于的无效值的断言255.0f


推荐阅读