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

[JavaFX] - Zmiana napisu na etykiecie

VPS Starter Arubacloud
0 głosów
487 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,280 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,280 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,280 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,280 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 570 wizyt
pytanie zadane 13 sierpnia 2018 w Java przez DanielKowalskiX Początkujący (460 p.)
0 głosów
0 odpowiedzi 828 wizyt
pytanie zadane 4 lipca 2016 w Java przez kaminki Obywatel (1,030 p.)
0 głosów
1 odpowiedź 932 wizyt
pytanie zadane 21 czerwca 2016 w Java przez kaminki Obywatel (1,030 p.)

92,453 zapytań

141,262 odpowiedzi

319,087 komentarzy

61,854 pasjonatów

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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...