2013-08-02 220 views
1

我有以下代码:JavaFX的图像获取图像路径

package imagebrowser; 

import java.io.File; 
import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

/** 
* 
* @author Dess 
*/ 
public class ImageBrowser extends Application { 
    Image[] images; 
    ImageView[] imagesView; 

@Override 
public void start(Stage primaryStage) { 


    StackPane root = new StackPane(); 

    Scene scene = new Scene(root, 600, 450); 

    int j = 0; 

    String path = "C://imbr/"; 
    String files; 
    File folder = new File(path); 
    File[] listOfFiles = folder.listFiles(); 

    for (int i = 0; i < listOfFiles.length; i++) { 
     if (listOfFiles[i].getName().endsWith("jpg") || listOfFiles[i].getName().endsWith("JPG")) { 
      System.out.println(listOfFiles[i].getAbsolutePath()); 

      files = "file:" + listOfFiles[i].getAbsolutePath(); 
      System.out.println(files); 

      images[j] = new Image(files, 200, 200, true, true); 
      imagesView[j] = new ImageView(); 
      imagesView[j].setImage(images[j]); 
      j++; 

     } 
    } 

    primaryStage.setTitle("Przegladarka Obrazkow"); 
    primaryStage.setScene(scene); 
    for(int i = 0; i < imagesView.length; i++){ 
    root.getChildren().add(imagesView[i]); 
    } 
    primaryStage.show(); 

} 

public static void main(String[] args) { 
    launch(args); 
} 

}

不工作:

Executing com.javafx.main.Main from C:\Users\Dess\Documents\NetBeansProjects\ImageBrowser\dist\run1928942616\ImageBrowser.jar using platform C:\Program Files\Java\jdk1.7.0_17/bin/java 
C:\imbr\1.jpg 
file:C:\imbr\1.jpg 
Exception in Application start method 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at com.javafx.main.Main.launchApp(Main.java:642) 
    at com.javafx.main.Main.main(Main.java:805) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:403) 
    at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47) 
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: java.lang.NullPointerException 
    at imagebrowser.ImageBrowser.start(ImageBrowser.java:49) 
    at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319) 
    at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:215) 
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179) 
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:176) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:176) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29) 
    at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73) 
    ... 1 more 
Java Result: 1 

我知道它是与图像文件的路径,但我不知道为什么。 我发现与确定路径这样的网站的例子和它的工作... 我会apreciate一些帮助^^

+0

你的代码适合我。还有其他什么东西打印在'引起的'线下?另见http://stackoverflow.com/questions/6020719/what-c​​ould-cause-java-lang-reflect-invocationtargetexception –

回答

1

原因是java.lang.NullPointerException因为你尚未初始化数组变量:

Image[] images;   // images is null 
ImageView[] imageViews; // imageViews is also null 

当访问images

images[j] = new Image(files, 200, 200, true, true); 

一个NullPointerException抛出因为imagesnull

为了使这一工作,你需要创建一个相应的数组对象,像

Image[] images = new Image[100]; // now images is a reference to an array of 100 elements 

不过,我强烈反对你使用普通阵列为这个 - 你不知道你想要的图像数量提前加载(你知道最大的,所以你仍然可以分配大到足以容纳图片的最大数量的数组,但可能会浪费内存),所以使用类似的ArrayList

List<Image> images = new ArrayList<>(); 

... 
images.add(new Image(files, 200, 200, true, true)); 
... 

见也Why is it preferred to use Lists instead of Arrays in Java?

+0

好吧,非常感谢:)我不会注意到它自己。 – Dess

+0

没问题 - 欢迎来到StackOverflow! –