setColor java приводит к недопустимому исключению аргумента, или утверждения пропускаются - PullRequest
0 голосов
/ 27 марта 2019

У меня есть этот код (который вызывается из 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 Ответ

1 голос
/ 27 марта 2019

Утверждения Java не включены по умолчанию.

  • В командной строке введите флаг командной строки -ea, чтобы включить подтверждения.

    java -ea your.main.ClassHere
    
  • Из Eclipse вам нужно перейти к вашей конкретной Конфигурации запуска и добавить -ea в ваши «Аргументы виртуальной машины» как , описанное здесь .

  • От IntelliJ это похоже.В вашей конкретной Конфигурации запуска добавьте -ea в «Параметры виртуальной машины».

Независимо от вашей IDE, цель состоит в том, чтобы заставить ее добавить -ea после java иперед именем основного класса для включения утверждений.

Как только вы включите утверждения, они остановят вашу программу с AssertionError, прежде чем вы получите IllegalArgumentException.

Этот конкретныйcase будет работать, так как вы указали в комментариях, что значение равно int - 267.Обратите внимание, что если у вас есть float значения, то они могут передать утверждения с недопустимыми значениями, которые больше 1.0f и меньше или равны 255.0f.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...