• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[JavaFX] - Zmiana napisu na etykiecie

0 głosów
98 wizyt
pytanie zadane 7 sierpnia 2018 w Java przez Niemiro72 Użytkownik (620 p.)
zmienione kategorie 7 sierpnia 2018 przez Arkadiusz Waluk

Cześć,

 

Mam problem ze zmianą napisu na drugim obiekcie typu Label. Zmieniając napis na pierwszym obiekcie wyświetla mi się wszystko poprawnie, jednak jeżeli dodam drugi obiekt i próbuję mu zmienić tekst, to kompilator rzuca mi błędem:

IDE - Intelij / ScenBuilder

Java - 10.0.2

 

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
	at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1787)
	at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670)
	at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
	at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8865)
	at javafx.controls/javafx.scene.control.Button.fire(Button.java:200)
	at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
	at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
	at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
	at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
	at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3876)
	at javafx.graphics/javafx.scene.Scene$MouseHandler.access$1300(Scene.java:3604)
	at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1874)
	at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2613)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
	at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
	at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
	at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
	at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:275)
	at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
	at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1784)
	... 47 more
Caused by: java.lang.NullPointerException
	at TempController.settingsButton(TempController.java:44)
	... 58 more

Będę bardzo wdzięczny za naprowadzenie na rozwiązanie problemu.

1
komentarz 7 sierpnia 2018 przez Eryk Chojnacki Obywatel (1,400 p.)
Zdecydowanie przydatny byłby kłopotliwy fragment kodu
komentarz 7 sierpnia 2018 przez Niemiro72 Użytkownik (620 p.)
przeniesione 7 sierpnia 2018 przez Arkadiusz Waluk
import javafx.fxml.FXML;

import javafx.scene.control.Label;

/**
 * Created $(DATE)
 */
public class TempController {

    @FXML
    private Label nameOfTab;

    @FXML
    public void pulpitButton()
    {
        nameOfTab.setText("Pulpit");
    }

    @FXML
    public void incomeButton()
    {
        nameOfTab.setText("Wpływy");
    }

    @FXML
    public void expenditiuresButton()
    {
        nameOfTab.setText("Wydatki");
    }

    @FXML
    public void boudgetButton()
    {
        nameOfTab.setText("Budżet");
    }

    @FXML
    public void settingsButton()
    {
        nameOfTab.setText("Ustawienia");
    }

    @FXML
    public void exitButton()
    {
        nameOfTab.setText("Wyjście");
    }

}

Jasne, wybacz z rozpędu nie wkleiłem. :)

komentarz 7 sierpnia 2018 przez Niemiro72 Użytkownik (620 p.)
I jak tu dodam analogicznie kolejną zmienną typu Label to rzuca mi właśnie takim błędem jak w pierwszym poście.

2 odpowiedzi

+1 głos
odpowiedź 7 sierpnia 2018 przez mbabane Maniak (70,020 p.)
wybrane 7 sierpnia 2018 przez Niemiro72
 
Najlepsza

Z tego wynika, że masz jakiś błąd w FXML. W IntelliJ jeśli wszystko jest poprawne to przy polach będącymi komponentami wstrzykiwanymi z FXML'a (czyli pola oznaczone adnotacją @FXML) pojawia się ikonka (przy nr linii) przypominająca dokument z pomarańczową kreską na dolnej krawędzi, a w kresce znaki: <>. Jeśli nie ma tej ikonki (pomijając,że masz to wyłączone w ustawieniach IntelliJ), to znaczy, że błąd jest albo w FXML, albo w kodzie Javy. Wygląd ikonki:

FXML Icon
 

 

Może dodałeś label w SceneBuilder, ale nie zapisałeś zmian lub edytujesz inny plik.

komentarz 7 sierpnia 2018 przez Niemiro72 Użytkownik (620 p.)

Jeżeli chodzi o ten znaczek, to po wciśnięciu go przenosi mnie do pliku .fxml

Jak kliknę tę żaróweczkę, to mi usuwa wpis fx:id="nameOfTab"

 

Jestem wdzięczny za chęć pomocy. :)

Jednak to chyba nie jest rozwiązanie mojego problemu.

komentarz 7 sierpnia 2018 przez mbabane Maniak (70,020 p.)

Jest bo przy test nie masz ikonki, przy nr linii, co oznacza błąd w fxml lub w javie, może nie ustawiłeś id do label test.

komentarz 7 sierpnia 2018 przez Niemiro72 Użytkownik (620 p.)
Wciąż nic. Podpiąłem ten obiekt do wyświetlanego napisu w gui programu (Masz rację, podczas testowania usunąłem id do labela). i również się wyświetla ten bloczek <> i również intelij chce mi usunąć id z fxmla.
komentarz 7 sierpnia 2018 przez mbabane Maniak (70,020 p.)
To nie wiem, w którymś etapie robisz coś nie tak. Może usuń cały plik fxml i zrób go od nowa, od zera, krok po kroku, albo odstaw to na kilka minut i po przerwie znajdziesz błąd od razu.
komentarz 7 sierpnia 2018 przez Niemiro72 Użytkownik (620 p.)
Masz może jakiś projekt z dwoma działającymi obiektami typu Label?

Jeżeli byś mi podrzucił to sobie porówna i przeanalizuję, będę bardzo wdzięczny.

Chociaż i tak bardzo Ci dziękuje za poświęcony czas. :)
komentarz 7 sierpnia 2018 przez mbabane Maniak (70,020 p.)
Przeglądnij ten kurs, powinieneś w nim znaleźć to czego szukasz:

https://www.youtube.com/playlist?list=PLpzwMkmxJDUwQuQR7Rezut5UE_8UGDxkU
komentarz 7 sierpnia 2018 przez Niemiro72 Użytkownik (620 p.)
oo, super.

Dzięki. :)
0 głosów
odpowiedź 7 sierpnia 2018 przez miro Pasjonat (20,730 p.)

Zmieniając napis na pierwszym obiekcie wyświetla mi się wszystko poprawnie, jednak jeżeli dodam drugi obiekt

Gdzie masz ten drugi obiekt? W Twoim kodzie widzę tylko nameOfTab. Masz NullPointerException - sprawdź czy nie masz literówki w pliku FXML i czy masz wszystkie te metody tam zawarte. 

komentarz 7 sierpnia 2018 przez Niemiro72 Użytkownik (620 p.)
    @FXML
    private Label nameOfTab;
    @FXML
    private Label test;

    @FXML
    public void pulpitButton()
    {
        nameOfTab.setText("Pulpit");
        test.setText("ok");
    }

Dodałem obiekt, edytuję go pod przyciskiem Pulpit, który wywołuję metodę void pulpitButton(). W momencie gdy nacisnę ten przycisk, to w konsoli wyskakuję mi ten błąd jak w pierwszym poście. Sprawdziłem, literówki również nie ma.

Podobne pytania

0 głosów
2 odpowiedzi 150 wizyt
pytanie zadane 13 sierpnia 2018 w Java przez DanielKowalskiX Początkujący (460 p.)
0 głosów
0 odpowiedzi 512 wizyt
pytanie zadane 4 lipca 2016 w Java przez kaminki Obywatel (1,030 p.)
0 głosów
1 odpowiedź 454 wizyt
pytanie zadane 21 czerwca 2016 w Java przez kaminki Obywatel (1,030 p.)
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

65,677 zapytań

112,314 odpowiedzi

237,031 komentarzy

46,654 pasjonatów

Przeglądających: 214
Pasjonatów: 8 Gości: 206

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...