2017-01-04 6 views
-1

У меня есть проект JavaFX BlueJ. Ниже приводится простая структураBlueJ Изображение не найдено

Project Structure

каталог Как вы можете видеть, что у меня есть Gui.java и map.png файлы в одном каталоге. Ниже мой код

@Override 
public void start(Stage primaryStage) throws Exception { 

    primaryStage.setTitle("Dragon Castle"); 

    Game game = new Game(); 
    TextArea logArea = new TextArea(); 

    VBox vbox = new VBox(10); 

    // Create maps 

    Canvas canvas = new Canvas(770, 630); 

    Image map = new Image("map.png"); // Here it is giving error 

    GraphicsContext gc = canvas.getGraphicsContext2D(); 

    // Insert controls 

    VBox controlsVbox = new VBox(5); 
    controlsVbox.setAlignment(Pos.CENTER); 

    HBox buttonHboxR1 = new HBox(5); 
    buttonHboxR1.setAlignment(Pos.CENTER); .... Other code 

Ошибка:

Exception in Application start method 
java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$152(LauncherImpl.java:182) 
    at com.sun.javafx.application.LauncherImpl$$Lambda$7/22058848.run(Unknown Source) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found 
    at javafx.scene.image.Image.validateUrl(Image.java:1099) 
    at javafx.scene.image.Image.<init>(Image.java:608) 
    at src.Gui.start(Gui.java:46) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(LauncherImpl.java:863) 
    at com.sun.javafx.application.LauncherImpl$$Lambda$57/5668924.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$53/812813.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$170(PlatformImpl.java:295) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$55/19277439.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(PlatformImpl.java:294) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$54/26973244.run(Unknown Source) 
    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$145(WinApplication.java:101) 
    at com.sun.glass.ui.win.WinApplication$$Lambda$43/21354624.run(Unknown Source) 
    ... 1 more 
Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found 
    at javafx.scene.image.Image.validateUrl(Image.java:1091) 
    ... 16 more 

Изображение не найдено. Я пробовал один и тот же код в eclipse, его работу. Также я поместил map.png в папку ресурсов, но он все еще не работает в BlueJ.

ответ

0

От Image documentation:

All URLs supported by URL can be passed to the constructor. If the passed string is not a valid URL, but a path instead, the Image is searched on the classpath in that case.

Итак, так как вы пройти простой путь, то Image конструктор будет пытаться решить, что относительно пути к классам. Посмотрев на трассировку стека, ваш класс Gui окажется в пакете с именем src (действительно ???), и ваше изображение находится в одном пакете. Следовательно, путь к изображению должен быть src/map.png.

Лучший способ получить изображение из того же пакета, что и текущий класс, чтобы получить URL из класса объекта в качестве ресурса:

Image map = new Image(getClass().getResource("map.png").toExternalForm()); 
+0

Если это все еще дает ошибку, вы должны проверить сборку папка (а не исходная папка) фактически содержит изображение в ожидаемом месте. Я не знаю BlueJ, поэтому я не знаю, как вы это настроили. –

+0

Ну, я попробовал ваш код. Это не работает. В папке 'bin' (все файлы классов) и' map.png' есть. – Junaid

+0

@Junaid Итак, в 'bin' у вас есть' src/Gui.class' и 'src/map.png'? Я не понимаю, почему в вашем скриншоте есть файлы .java' и '.class' в той же папке. –

Смежные вопросы