JAVA FX Button képpel

0 értékelés
66 megtekintés
Finnlandia (4 pont) kérdezte Nov 7.

Sziasztok!

A Java programozó tanfolyamban befejeztem a Java FX kezdő kurzust, és ezen felbátorodva szeretnék egy kő-papír-olló programot készíteni, 3 gomb lenne rajta, egy kő egy papír és egy olló gomb képpel. Az alábbi kódot írtam FXML-be, semmilyen errort nem jelez a netbeans, viszont le nem fut. Valamint ha megnyitnám duplakattintással az FXML-t Scene Builderrel az is hibát dob ki, bemásolom a hibákat lentebb.

A kód:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.image.*?>

<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="rockpaperscissors.RPSViewController">
   <fx:define>
   <Image fx:id="rockBtnImage" url="@C:\Users\Peter\Documents\NetBeansProjects\RockPaperScissors\src\rockpaperscissors\rock.png">
   </Image>
   </fx:define>

    <children>

       <Button layoutX="81.0" layoutY="155.0" mnemonicParsing="false" prefHeight="58.0" prefWidth="106.0" text="Button">
        <graphic>
        <ImageView image="$rockBtnImage">
        </ImageView>
        </graphic>
      </Button>
   </children>
</AnchorPane>

A hiba amit futtatáskor kapok:

Executing C:\Users\Bor Péter\Documents\NetBeansProjects\RockPaperScissors\dist\run2057411442\RockPaperScissors.jar using platform C:\Program Files\Java\jdk1.8.0_181\jre/bin/java
jar:file:/C:/Users/Bor%20P%c3%a9ter/Documents/NetBeansProjects/RockPaperScissors/dist/run2057411442/RockPaperScissors.jar!/rockpaperscissors/RPS.fxml/C:\Users\Bor Péter\Documents\NetBeansProjects\RockPaperScissors\src\rockpaperscissors\rock.png
Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: 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$154(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javafx.fxml.LoadException:
file:/C:/Users/Bor%20P%c3%a9ter/Documents/NetBeansProjects/RockPaperScissors/dist/run2057411442/RockPaperScissors.jar!/rockpaperscissors/RPS.fxml:15

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
    at rockpaperscissors.RockPaperScissors.start(RockPaperScissors.java:15)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(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$147(WinApplication.java:177)
    ... 1 more
Caused by: java.lang.IllegalArgumentException: Invalid URL: unknown protocol: c
    at javafx.scene.image.Image.validateUrl(Image.java:1121)
    at javafx.scene.image.Image.<init>(Image.java:693)
    at com.sun.javafx.fxml.builder.JavaFXImageBuilder.build(JavaFXImageBuilder.java:47)
    at com.sun.javafx.fxml.builder.JavaFXImageBuilder.build(JavaFXImageBuilder.java:37)
    at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:763)
    at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2823)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2532)
    ... 17 more
Caused by: java.net.MalformedURLException: unknown protocol: c
    at java.net.URL.<init>(URL.java:600)
    at java.net.URL.<init>(URL.java:490)
    at java.net.URL.<init>(URL.java:439)
    at javafx.scene.image.Image.validateUrl(Image.java:1115)
    ... 23 more
Exception running application rockpaperscissors.RockPaperScissors
Java Result: 1
Deleting directory C:\Users\Bor Péter\Documents\NetBeansProjects\RockPaperScissors\dist\run2057411442
jfxsa-run:
BUILD SUCCESSFUL (total time: 1 second)


Ebben tudna valaki segíteni miért történik? A megoldást ahogy próbáltam megvalósítani Stackoverflowról szedtem.

 Előre is köszönöm

Krisz Guru (1,960 pont) szólt hozzá Nov 7.
Linkeld be a kodot vagy a hibat kerlek, a jobb olvashatosag erdekeben.
Finnlandia (4 pont) szólt hozzá Nov 7.
Most írtam először erre a fórumra, hogyan linkeljem be?
Krisz Guru (1,960 pont) szólt hozzá Nov 7.
Formazni a szerkesztoben tudsz, reszletes leirast rola itt talalhatsz:
http://javitskihatevedek.com/index.php/szabalyok
(Kod irasa kerdesben / Valaszban szekcio)

Ha linkelni szeretnel inkabb, egyik megoldas a sok kozul:
https://pastebin.com/
Finnlandia (4 pont) szólt hozzá Nov 8.
https://pastebin.com/TE0PDSni

Köszönöm a segítséget, látható a kód és a hiba
Krisz Guru (1,960 pont) szólt hozzá Nov 8.
Erdemes a kerdesbe szerkeszteni a linket! :)

1 Válasz

0 értékelés
tkiss Szakértő (308 pont) válaszolta meg Nov 7.
Krisz kiválasztva Nov 9.
 
Legjobb válasz

Szia!

Ha teljes útvonallal akarod megadni a képet, akkor "url="@C:\Users..." helyett própáld meg "url="file:C:\Users..."-al megadni az útvonalat.

Üdv.: Tamás

tkiss Szakértő (308 pont) szólt hozzá Nov 8.
Pedig ennyiből ami itt van, úgy tűnik a képet nem tudja beolvasni az adott útvonalról. Az mondjuk kicsit fura, hogy a projekted a "C:\Users\Bor Péter\Documents\NetBeansProjects\RockPaperScissors..." folder alatt van és a képet a "C:\Users\Peter\Documents\NetBeansProjects\RockPaperScissors..." alól akarod beolvasni. Lehet hülye kérdés, de biztos ott van a kép?
Finnlandia (4 pont) szólt hozzá Nov 17.
Sikerült közben elkészíteni a programot kicsit másként, de valószínűleg a képpel van valami baj. A scene builderrel Image View-ba gond nélkül be tudom tenni a mappában lévő képet, de ha a Controllerbenlétrehozok egy Image változót a képpel akkor már rögtön nem fut le.

A kép ott van  a Neatbeans Projectsben a projekt mappájában az FXMLDocument, a Controller és a .java file mellett, a Netbeansben meg is jelenik a packageben.

Itt a kód és a hiba:
https://pastebin.com/9srChu4v
tkiss Szakértő (308 pont) szólt hozzá Nov 17.
Szia!

Nem vagyok ugyan egy javafx guru, de szerencsére ez nem javafx specifikus probléma. Én ugyan biztos nem így strukturálnám a kép betöltését(direkt az adattagba), de ha annyi a kérdés, hogy jelenleg miért nem találja a képet, ha így akarod betölteni a kontrolleredben, akkor próbáld ki a következőt:
Jelenleg az adattagodat így inicializálod: "Image rock = new Image("@rock.png");".
Ehelyett próbáld így: "Image rock = new Image(this.getClass().getResourceAsStream("rock.png"));".

Üdv.: Tamás
...