What I want to achieve:
I want to visualize some javax.swing.Icon
s from the javax.swing.UIManager
. On the internet I've found a list of UIManager
-keys, which will not only return Icons
but also Strings
, Colors
and so on. So in this step I want to filter the list of keys so only the Icon
-keys remain.
My Approach:
I copied a list of UIManager
keys into a textfile and included it as recource in my Java-Project. I successfully read the file so I split the file-content by lines and added them to an ArrayList
of Strings
. Now i wanted to stream the content of this ArrayList
and filter the keys by wether the UIManager.getIcon(Object key)
-Method returns null
or not...
My Problem
so far: the UIManager
always returns null
. I printed all the keys and the UIManager
result to the console (see "Output / Test - stream keys" in my code). If i manually copy a key from the console (one that I know should work) and paste it into the exact same piece of code, it actually works (see "Output / Test - single Key" in my code).
Interesting Behavior shows when I append a String
to the key that I want to print to the console (See the variable "suffix" under "Output / Test - stream Keys" in my code). If the variable suffix
does not start with "\n", the following print-Method in the stream will only print the suffix
and no longer show the other content. For example if I type String suffix = "test";
only "test" will be printed from the .forEach(key->System.out.println(... + key + suffix);
However, this behavior does not show up in the "Output / Test - single Key"-Example.
I have no idea, what is going on or if the (in my opinion) strange behavior as anything to do with the problem. I appreciate any kind of help!
Piece from "UIManagerKeys.txt": Here are some keys for testing and reproducibility purposes...
FileView.computerIcon
FileView.directoryIcon
FileView.fileIcon
FileView.floppyDriveIcon
FileView.hardDriveIcon
FormattedTextField.background
FormattedTextField.border
windowText
My Code:
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);
}
}