2016-05-09 2 views
1

Я не понимаю, как добавить простое изображение. Я импортировал все и последовали за то, что они сказали, что на этой странице:Самый простой способ добавить изображение в Javafx?

http://www.java2s.com/Code/Java/JavaFX/LoadajpgimagewithImageanduseImageViewtodisplay.htm

JavaFX код

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class test extends Application { 

    @Override 
    public void start(Stage stage) { 
     stage.setTitle("HTML"); 
     stage.setWidth(500); 
     stage.setHeight(500); 
     Scene scene = new Scene(new Group()); 
     VBox root = new VBox();  

     final ImageView selectedImage = new ImageView(); 
     Image image1 = new Image(test.class.getResourceAsStream("C:\\Users\\user\\Desktop\\x.jpg")); 

     selectedImage.setImage(image1); 

     root.getChildren().addAll(selectedImage); 

     scene.setRoot(root); 

     stage.setScene(scene); 
     stage.show(); 
    } 

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

Ошибка

at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$156(LauncherImpl.java:182) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NullPointerException: Input stream must not be null 
    at javafx.scene.image.Image.validateInputStream(Image.java:1110) 
    at javafx.scene.image.Image.<init>(Image.java:694) 
    at prototype.test.start(test.java:23) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$149(WinApplication.java:191) 
+1

'test.class.getResourceAsStream (" C: \\ Users \\ user \\ Desktop \\ x.jpg ")' возвращает 'null', вы пытались использовать'/', как указано в документации? – BeyelerStudios

ответ

-1

Your problem is at line getResourceAsStream("C:\\Users\\user\\Desktop\\x.jpg")); Заменить "\\" на "/", ваша проблема решена

2

Class.getResourceAsStream пытается загрузить элемент в путь к классам. Он не предназначен для загрузки файлов, если они не включены в путь к классам. Для того, чтобы загрузить файл вне пути к классам, используйте FileInputStream вместо:

Image image1 = new Image(new FileInputStream("C:\\Users\\user\\Desktop\\x.jpg")); 

Или использовать Image(String) constructor и передать URL файла:

Image image1 = new Image(new File("C:\\Users\\user\\Desktop\\x.jpg").toURI().toURL().toExternalForm()); 
1

Попробуйте добавить изображение в GridPane

ImageView img1 = new ImageView(new 
Image(getClass().getResourceAsStream("C:\\Users\\user\\Desktop\\x.jpg"))); 
    GridPane.setConstraints(img1, 0, 4);