По моему опыту, наиболее гибкий подход для поиска ресурсов заключается в использовании InputStream
и разрешении загрузчику классов найти объект.Таким образом, основываясь на утверждении, что ресурс (изображение) находится в папке src
, и предполагая, что указанная папка src
полностью добавлена в путь к классам, может сработать что-то вроде следующего.
Примечание: я предполагаю, что .setGraphic(new ImageView(icon))
правильный - я не слишком знаком с JavaFX.
private void loadAndDisplayImage(Button btn) {
final String name = "icon/test.png";
ClassLoader cl = this.getClass().getClassLoader();
//
// use the try with resources, and allow the classloader to find the resource
// on the classpath, and return the input stream
//
try (InputStream is = cl.getResourceAsStream(name)) {
// the javafx Image accepts an inputstream, with width, height, ratio, smoot
Image icon = new Image(is, 25, 25, false, false);
// should probably ensure icon is not null, but presumably if the resource
// was found, it is loaded properly, so OK to set the image
btn.setGraphic(new ImageView(icon));
}
catch (IOException e) {
e.printStackTrace();
}
}
Затем вызовите метод loadAndDisplayImage(pinButton);
из setStage(...)
Iдумаю, что этот подход немного более гибкий, чем попытка закодировать URL.