java - 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(包括)之间时,一个参数怎么可能超出范围?
解决方案
默认情况下不启用 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
。