ciao!
sto cercando di riempire una ListView in JavaFX con immagini.
prendo la lista di immagini da un DirectoryChooser:
poi nel controller lancio questo metodo:codice:public class ListImages { public static ArrayList<String> getImages(File directory, Stage stage) { ArrayList<String> images = new ArrayList<>(); DirectoryChooser dc = new DirectoryChooser(); dc.setTitle("Open photo directory"); dc.setInitialDirectory(directory); File dir = dc.showDialog(stage); if (dir != null) { File[] files = dir.listFiles((dir1, name) -> (name.endsWith(".jpg") || name.endsWith(".jpeg") || name.endsWith(".png"))); for (File f : files) { images.add(f.getAbsolutePath()); } } return images; } }
la lista viene correttamente riempita:codice:@FXML private void openDirectory() { images = ListImages.getImages(new File(System.getProperty("user.home") + "/1_TEST_PHOTO"), getStage()); ObservableList<String> items = FXCollections.observableArrayList(images); listViewImages.setItems(items); listViewImages.setCellFactory(param -> new ListCell<String>() { private ImageView imageView = new ImageView(); @Override public void updateItem(String name, boolean empty) { super.updateItem(name, empty); imageView.setImage(new Image(name)); setGraphic(imageView); setText(name); } }); }
però ottengo questo errore:codice:/home/matte/1_TEST_PHOTO/pexels-photo-23978.jpg /home/matte/1_TEST_PHOTO/pexels-photo-23978.jpg /home/matte/1_TEST_PHOTO/pexels-photo-28762.jpg /home/matte/1_TEST_PHOTO/pexels-photo.jpg /home/matte/1_TEST_PHOTO/pexels-photo-27414.jpg /home/matte/1_TEST_PHOTO/night-studio-color-minimalism-60470.jpeg /home/matte/1_TEST_PHOTO/training-train-lime-barbell-39688.jpeg /home/matte/1_TEST_PHOTO/pexels-photo.jpeg /home/matte/1_TEST_PHOTO/norway-mountain-sky-blue.jpg /home/matte/1_TEST_PHOTO/pexels-photo-70381.png /home/matte/1_TEST_PHOTO/fishing-sea-man-person.jpg /home/matte/1_TEST_PHOTO/pexels-photo-69224.jpeg
dove sbaglio secondo voi??codice:Exception in thread "JavaFX Application Thread" java.lang.NullPointerException: URL must not be null at javafx.scene.image.Image.validateUrl(Image.java:1093) at javafx.scene.image.Image.<init>(Image.java:620) at com.mp.photoalbum.MainController$1.updateItem(MainController.java:47) at com.mp.photoalbum.MainController$1.updateItem(MainController.java:41) at javafx.scene.control.ListCell.updateItem(ListCell.java:480) at javafx.scene.control.ListCell.access$300(ListCell.java:72) at javafx.scene.control.ListCell$4.invalidated(ListCell.java:299) at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:111) at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146) at javafx.scene.control.ListCell.setListView(ListCell.java:305) at javafx.scene.control.ListCell.updateListView(ListCell.java:494) at com.sun.javafx.scene.control.skin.ListViewSkin.createCell(ListViewSkin.java:292) at com.sun.javafx.scene.control.skin.ListViewSkin.lambda$new$2(ListViewSkin.java:99) at com.sun.javafx.scene.control.skin.VirtualFlow.getCell(VirtualFlow.java:1777) at com.sun.javafx.scene.control.skin.VirtualFlow.getCellLength(VirtualFlow.java:1879) at com.sun.javafx.scene.control.skin.VirtualFlow.computeViewportOffset(VirtualFlow.java:2528) at com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1189) at javafx.scene.Parent.layout(Parent.java:1087) at javafx.scene.Parent.layout(Parent.java:1093) at javafx.scene.Parent.layout(Parent.java:1093) at javafx.scene.Parent.layout(Parent.java:1093) at javafx.scene.Scene.doLayoutPass(Scene.java:552) at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2397) at com.sun.javafx.tk.Toolkit.lambda$runPulse$2(Toolkit.java:398) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:397) at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:424) at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:518) at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:498) at com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:491) at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:319) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) at com.sun.glass.ui.gtk.GtkApplication.lambda$null$5(GtkApplication.java:139) at java.lang.Thread.run(Thread.java:748)

Rispondi quotando
