我有这段代码(从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(包括)之间时,参数可能超出范围吗?
答案 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
的无效值的断言。