Чего я хочу достичь: Я хочу визуализировать некоторые javax.swing.Icon
s из javax.swing.UIManager
. На inte rnet я нашел список UIManager
-ключей, которые будут возвращать не только Icons
, но также Strings
, Colors
и так далее. Итак, на этом шаге я хочу отфильтровать список ключей, чтобы остались только клавиши Icon
.
Мой подход: Я скопировал список ключей UIManager
в текстовый файл и включил его в качестве источника в мой Java -Проект. Я успешно прочитал файл, поэтому разделил содержимое файла по строкам и добавил их к ArrayList
из Strings
. Теперь я хотел передать содержимое этого ArrayList
и отфильтровать ключи по методу UIManager.getIcon(Object key)
-Метод возвращает null
или нет ...
Моя проблема : UIManager
всегда возвращает null
. Я распечатал все ключи и результат UIManager
на консоли ( см. «Вывод / проверка - ключи потока» в моем коде ). Если я вручную скопирую ключ из консоли (который, как я знаю, должен работать) и вставлю его в точно такой же кусок кода, он действительно работает ( см. «Вывод / проверка - один ключ» в моем коде ).
Интересное поведение показывает, когда я добавляю String
к ключу, который я хочу распечатать на консоли ( См. Переменную «суффикс» в разделе «Вывод / проверка»). - Ключи потока "в моем коде ). Если переменная suffix
не начинается с "\ n", следующий метод print в потоке будет печатать только suffix
и больше не отображать другое содержимое. Например, если я наберу String suffix = "test";
, из * 1041 будет напечатан только «test». Однако это поведение не отображается в примере «Вывод / проверка - один ключ».
У меня нет Идея, что происходит или если (на мой взгляд) странное поведение как-то связано с проблемой. Я ценю любую помощь!
Пьеса из "UIManagerKeys.txt": Вот несколько ключей для целей тестирования и воспроизводимости ...
FileView.computerIcon
FileView.directoryIcon
FileView.fileIcon
FileView.floppyDriveIcon
FileView.hardDriveIcon
FormattedTextField.background
FormattedTextField.border
windowText
Мой код:
package main;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.UIManager;
public class Main {
public Main() {
}
public static void main(String args[]) {
ArrayList<String> uiKeys = new ArrayList<>();
String fileName = "recources/UIManagerKeys.txt";
ClassLoader classLoader = new Main().getClass().getClassLoader();
File file = new File(classLoader.getResource(fileName).getFile());
// Check: is File found?
System.out.println("File Found : " + file.exists());
try {
// Read File Content
String content = new String(Files.readAllBytes(file.toPath()));
// Split by line and collect
String[] keys = content.split("\n");
uiKeys.addAll(Arrays.asList(keys));
} catch (IOException e) {
System.out.println("Error: " + e);
}
// Output / Test - stream Keys
System.out.println("Total Number of Keys: " + uiKeys.size());
String suffix = ""; // Interesting behavior when String is not empty
uiKeys.stream()
.map(key -> key.replaceAll(" ", "").replaceAll("\n", "")) // Just to be sure
.forEach(key -> System.out.println("IconFound: " + (UIManager.getIcon(key) != null) + "\tKey: " + key + suffix));
// Output / Test - single Key
System.out.println("\n");
String key = "FileView.directoryIcon"; // Copied from console
System.out.println("IconFound: " + (UIManager.getIcon(key) != null) + "\tKey: " + key + suffix);
}
}