Вы можете поменять NaN
на 0
и попробовать вычислить косинусное подобие.
Если бы Вы хотите сохранить Вас значками как статические константы, я извлек бы инстанцирование объектов ImageIcon в статический метод;
public static final Icon ok = icon("ok.png");
private static Icon icon(String path) {
URL resource = Icons.class.getResource("/icons/" + path);
if (resource == null) {
// Log something...
return null;
}
return new ImageIcon(resource);
}
Таким образом, Вы имеете контроль каждый раз, когда что-то перестало работать, и Вы не должны повторять себя в инстанцировании.
Кроме того, я сделал бы финал констант.
Более общий подход мог быть должен использовать отражение для осмотра класса Значков и ресурсов загрузки для каждого общедоступного статического Поля значка в классе. Таким образом, необходимо было бы только объявить новый постоянный Значок, и соответствующий ресурс будет загружен автоматически на основе названия константы. Оставьте комментарий, если Вы хотите больше подсказок для того, чтобы сделать это.
Это, кажется, довольно простой способ сделать это. Хотя я назвал бы изображения с тем же именем как, что они для ("ok.png", "cancel.png"). И удостоверьтесь, что ясно, что удаление или переименование изображений могут вызвать проблемы.
Я вижу две проблемы с этим, оба могли бы быть приемлемыми:
Номер 1, вероятно, приемлем, если можно удостовериться, что значки всегда там и могут даже работаться вокруг путем помещения инициализации в статическом блоке инициализатора и добавления хорошей обработки исключений и входа.
Номер 2, вероятно, приемлем, так как значки обычно используются всюду по всему времени выполнения приложения, и они не были бы освобождены задолго до выходов приложения так или иначе.
Так, в целом, я сказал бы, что это прекрасно.
Это, кажется, стандартный способ сделать вещи, но у меня были проблемы с прежде.
Если Вы будете использовать Eclipse со Знатоком и сохраните эти значки в каталоге ресурса знатока, когда Eclipse сделает одну из своих автоматических сборок, он не скопирует файлы значков в Ваш каталог цели/классов. Это вызовет исключение на этапе выполнения, когда оно не сможет найти значки.
Необходимо вручную сделать пакет знатока, по крайней мере, однажды для получения значков в правильном месте.