我正在制作一个用于图像管理的简单图形桌面应用程序,除了它的sceneBuilder之外,我还在使用JavaFX。这个想法是,按下一个按钮,就会出现一个FileChooser,选择图像并显示一个新窗口,上面有所有的背景图像。问题是,在这样做的过程中。我遇到了一个无法识别的错误
编辑:我发现如果在同一个窗口中打开图像,则不会出现错误
我的代码:
public void OpenWindow(ActionEvent event) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("Window2.fxml"));
Scene secondScene = new Scene(root,800,800);
Stage newWindow = new Stage();
newWindow.setTitle("Imagen");
newWindow.setScene(secondScene);
newWindow.setX(100);
newWindow.setY(100);
newWindow.show();
/////// Open Window //////
FileChooser fileChooser = new FileChooser();
FileChooser.ExtensionFilter extFilterJPG = new FileChooser.ExtensionFilter(" JPG", "*.JPG");
fileChooser.getExtensionFilters().addAll(extFilterJPG);
File file = fileChooser.showOpenDialog(null);
try {
BufferedImage bufferedImage = ImageIO.read(file);
Image image = SwingFXUtils.toFXImage(bufferedImage, null);
myImageView.setImage(image);
}catch(IOException ex) {
System.out.println(ex.getMessage());
}
}
编辑:(解决方案是创建一个新的FMXL装载机(`
FXMLLoader loader = new FXMLLoader(getClass().getResource("SecondController.fxml"));
Parent root = (Parent) loader.load();
SecondController secController = loader.getController();
secController.nuevaImagen(imagen);
secController.mostrarInfo(imagen); // Hacer que el controlador de la imagen muestre la info
secController.addMainController(this);
Stage stage = new Stage();
stage.setScene(new Scene(root));
stage.setTitle(datosImagenActiva.titulo);
stage.show();`
您需要将一个Stage
对象传递给fileChooser.showOpenDialog
。试试这个:
File file = fileChooser.showOpenDialog(newWindow);
编辑:正如@Slaw 所指出的,这是错误的