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

[JavaFX] - Zmiana napisu na etykiecie

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
815 wizyt
pytanie zadane 7 sierpnia 2018 w Java przez Niemiro72 Użytkownik (660 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,420 p.)
Zdecydowanie przydatny byłby kłopotliwy fragment kodu
komentarz 7 sierpnia 2018 przez Niemiro72 Użytkownik (660 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 (660 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 Szeryf (79,260 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 (660 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 Szeryf (79,260 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 (660 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 Szeryf (79,260 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 (660 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 Szeryf (79,260 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 (660 p.)
oo, super.

Dzięki. :)
0 głosów
odpowiedź 7 sierpnia 2018 przez miro Pasjonat (23,870 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 (660 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 684 wizyt
pytanie zadane 13 sierpnia 2018 w Java przez DanielKowalskiX Początkujący (460 p.)
0 głosów
0 odpowiedzi 893 wizyt
pytanie zadane 4 lipca 2016 w Java przez kaminki Obywatel (1,030 p.)
0 głosów
1 odpowiedź 1,014 wizyt
pytanie zadane 21 czerwca 2016 w Java przez kaminki Obywatel (1,030 p.)

93,173 zapytań

142,184 odpowiedzi

321,967 komentarzy

62,500 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1149p. - dia-Chann
  2. 1131p. - Łukasz Piwowar
  3. 1124p. - CC PL
  4. 1118p. - Łukasz Eckert
  5. 1097p. - Michal Drewniak
  6. 1081p. - Marcin Putra
  7. 1076p. - rucin93
  8. 1071p. - rafalszastok
  9. 1054p. - Adrian Wieprzkowicz
  10. 1047p. - Piotr Aleksandrowicz
  11. 1036p. - Michał Telesz
  12. 1000p. - ssynowiec
  13. 992p. - Dominik Łempicki (kapitan)
  14. 922p. - Mariusz Fornal
  15. 865p. - Anonim 3619784
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...