Невозможно загрузить изображение в JavaFX
Я проверил этот код, чтобы создать диалог с изображением.
final int xSize = 400;
final int ySize = 280;
final Color backgroundColor = Color.WHITE;
final String text = "SQL Browser";
final String version = "Product Version: 1.0";
final Stage aboutDialog = new Stage();
aboutDialog.initModality(Modality.WINDOW_MODAL);
Button closeButton = new Button("Close");
closeButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
aboutDialog.close();
}
});
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(25, 25, 25, 25));
Image img = new Image("logo.png");
ImageView imgView = new ImageView(img);
grid.add(imgView, 0, 0);
grid.add(new Text(text), 0, 1);
grid.add(new Text(version), 0, 2);
grid.add(closeButton, 14, 18);
Scene aboutDialogScene = new Scene(grid, xSize, ySize, backgroundColor);
aboutDialog.setScene(aboutDialogScene);
aboutDialog.show();
Я поместил файл изображения в каталог /src
.
Но по какой-то причине изображение не отображается. Можете ли вы помочь мне исправить мою ошибку?
Ответы
Ответ 1
Просто замените этот код:
Image img = new Image("logo.png");
с этим
Image img = new Image("file:logo.png");
Документ справка. https://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/Image.html
Когда вы передаете String
в класс Image
он может обрабатываться четырьмя различными способами (скопировано из документа):
// The image is located in default package of the classpath
Image image1 = new Image("/flower.png");
// The image is located in my.res package of the classpath
Image image2 = new Image("my/res/flower.png");
// The image is downloaded from the supplied URL through http protocol
Image image3 = new Image("http://sample.com/res/flower.png");
// The image is located in the current working directory
Image image4 = new Image("file:flower.png");
Префикс file:
это просто схема URI или, другими словами, аналог классификатора протокола http:
Это также работает в файловом браузере или в веб-браузере...;)
Для дальнейшего ознакомления вы можете взглянуть на вики-страницу схемы URI файла: https://en.wikipedia.org/wiki/File_URI_scheme
Удачного кодирования,
Kalasch
Ответ 2
Попробуйте следующее:
img = new Image("/logo.png");
Если не указана часть протокола, указывающая URL-адрес (как http: или файл:), файл должен находиться в пакете по умолчанию. Если вы хотите, чтобы он вставлял другой пакет, скажем, com.my.images, вы добавляете эту информацию по следующему пути:
img = new Image("/com/my/images/logo.png");
Ответ 3
Image img = new Image("file:/logo.png");
или путь с помощью пути:
Image img = new Image("file:c:/logo.png");
или
File f = new File("c:\\logo.png");
Image img = new Image(f.toURI().toString());
также может использовать:
new Image(file:src/logo.png) //root of project
Ответ 4
Эта функция:
Image image = new Image(getClass()
.getResourceAsStream("ChimpHumanHand.jpg"));
Ответ 5
скопировать и вставить изображение в папку, где присутствует исходный пакет (исходные пакеты в среде IDE NetBeans). Тогда
Image image = new Image("a1.jpg");
Image image = new Image("File:a1.jpg");
оба будут работать.