Java wywołanie opóźnienia / nie uruchamiająca się aplikacja

0

Witam wszystkich, jestem nowy na forum i ogólnie w programowaniu, zacząłem naukę właśnie od javy i mam problem który nie wiem jak rozwiązać:
W ramach nauki JavaFX chciałem zrobić symulator logowania. Wcześniej próbowałem przy pomocy thread.sleep ale efekt był taki że pauzwało całe GUI.
Chodzi mi o to żeby po wciśnięciu przycisku zaloguj widniał napis Logowanie... (ale żeby kropki się odliczały).
W tej chwili po poprawkach prawie działało jak trzeba, ale nagle przestała się w ogóle aplikacja uruchamiac (na dole w konsoli powiadomień gradle jest napisane task:run i kręci się ale apki nie uruchamia)
Kod wiem że bardzo rozwalony i mega syf, ale to dopiero początek nauki, więc z góry dziękuje za pomoc w rozwiązaniu czemu się nie uruchamia, i ewentualnie jak to rozwiązać z opoźnieniem.

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

import java.awt.*;
import java.util.Timer;
import java.util.TimerTask;

public class Zadanie extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        Group grupa = new Group();
        Label label = new Label("Witam w mojej aplikacji. \n Jest to aplikacja szkoleniowa" +
                "\n Ma ona za zadanie utrwalic kurs z Java oraz JavaFX" +
                "\n Jest to symulator logowania" +
                "\n Wprowadz dane ponizej aby sie zalogowac");
        Label niewlasciwe = new Label("Login lub haslo sa puste lub niewlasciwe");
        niewlasciwe.setLayoutY(220);
        niewlasciwe.setVisible(false);

        Label zalogowany = new Label("Logowanie pomyslne!");
        zalogowany.setVisible(false);

        Label logowanie1 = new Label("Logowanie.");
        logowanie1.setVisible(false);
        logowanie1.setLayoutY(300);
        Label logowanie2 = new Label("Logowanie..");
        logowanie2.setVisible(false);
        logowanie2.setLayoutY(300);
        Label logowanie3 = new Label("Logowanie...");
        logowanie3.setVisible(false);
        logowanie3.setLayoutY(300);


        TextField login = new TextField();
        login.setLayoutY(120);
        login.setPromptText("Wprowadz login");

        PasswordField haslo = new PasswordField();
        haslo.setPromptText("Wprowadz haslo");
        haslo.setLayoutY(150);

        Button zaloguj = new Button("Zaloguj");
        zaloguj.setLayoutY(180);
        zaloguj.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent actionEvent) {
                class MyTimerTask extends TimerTask {

                    @Override
                    public void run() {
                        logowanie1.setVisible(true);

                    }
                }
                class MyTimerTask2 extends TimerTask {

                    @Override
                    public void run() {
                        logowanie2.setVisible(true);

                    }
                }
                class MyTimerTask3 extends TimerTask {

                    @Override
                    public void run() {
                        logowanie3.setVisible(true);
                    }
                }
                Timer timer1 = new Timer();
                MyTimerTask timer1_task = new MyTimerTask();
                timer1.schedule(timer1_task, 0, 2000);

                Timer timer2 = new Timer();
                MyTimerTask2 timer2_task = new MyTimerTask2();
                timer1.schedule(timer2_task, 2000, 2000);

                Timer timer3 = new Timer();
                MyTimerTask3 timer3_task = new MyTimerTask3();
                timer1.schedule(timer3_task, 4000, 2000);


                String loginWlasciwy = login.getText();
                String hasloWlasciwe = haslo.getText();
                class MyTimerTask4 extends TimerTask {

                    @Override
                    public void run() {
                        Timer timer4 = new Timer();
                        MyTimerTask4 timer4_task = new MyTimerTask4();
                        timer4.schedule(timer4_task, 6000);
                        if (loginWlasciwy.equals("login") && hasloWlasciwe.equals("haslo")) {

                            label.setVisible(false);
                            login.setVisible(false);
                            haslo.setVisible(false);
                            zaloguj.setVisible(false);
                            niewlasciwe.setVisible(false);
                            zalogowany.setVisible(true);
                            logowanie1.setVisible(false);
                            logowanie2.setVisible(false);
                            logowanie3.setVisible(false);

                        } else {

                            niewlasciwe.setVisible(true);
                            logowanie1.setVisible(false);
                            logowanie2.setVisible(false);
                            logowanie3.setVisible(false);

                        }
                    }

                }


                grupa.getChildren().add(login);
                grupa.getChildren().add(label);
                grupa.getChildren().add(haslo);
                grupa.getChildren().add(zaloguj);
                grupa.getChildren().add(niewlasciwe);
                grupa.getChildren().add(zalogowany);
                grupa.getChildren().add(logowanie1);
                grupa.getChildren().add(logowanie2);
                grupa.getChildren().add(logowanie3);
                Scene scena = new Scene(grupa, 800, 600);


                primaryStage.setScene(scena);
                primaryStage.setTitle("Aplikacja z zadania");
                primaryStage.show();

            }
        });
    }
}
3
micro_atx napisał(a):

W ramach nauki JavaFX

Nie ucz się JavyFX . Nikomu się nie chce tego debugować. Poza tym wiedza z tego narzędzia nigdzie ci się nie przyda. W ramach nauki... po prostu trzymaj się konsoli.

0

Tzn JavaFX jest na końcu kursu Javy z Udemy.

2

Nic się nie pojawia, bo ten kod:

        grupa.getChildren().add(login);
        grupa.getChildren().add(label);
        grupa.getChildren().add(haslo);
        grupa.getChildren().add(zaloguj);
        grupa.getChildren().add(niewlasciwe);
        grupa.getChildren().add(zalogowany);
        grupa.getChildren().add(logowanie1);
        grupa.getChildren().add(logowanie2);
        grupa.getChildren().add(logowanie3);
        Scene scena = new Scene(grupa, 800, 600);

        primaryStage.setScene(scena);
        primaryStage.setTitle("Aplikacja z zadania");
        primaryStage.show();

jest nie tam gdzie trzeba (powinien być w bezpośrednio w funkcji main).
Jeżeli zmieniasz coś w GUI z innego wątku, użyj Platform.runLater() http://tutorials.jenkov.com/javafx/concurrency.html

//najlepiej popatrz na to: https://docs.oracle.com/javase/8/javafx/api/javafx/animation/Timeline.html

1
micro_atx napisał(a):

Tzn JavaFX jest na końcu kursu Javy z Udemy.

Z serii "I've learned that the hard way", mogę stwierdzić, że nie wszystkie ścieżki rozwoju proponowane przez kursy/książki są właściwe.

0

Jest to dla mnie ciekawe. Uczę się javy i czesto mam problem z wyznaczaniem sobie kierunku nauki. Myślałem ze graficzne interfejsy to jedna z podstaw programowania . Moja nauka polega na tym ze wymyslam sobie jakiś projekt np . gra w statki i uczę sie wszystkiego co jest mi potrzebne do jego realizacji. Następnie inny projekt i znowu zwiększam swój warsztat . Niestety natrafiam często na problem zbyt ambitnych projektów :( ( oczywiście z mojego poziomu zbyt ambitnych ) .

1
okon66113 napisał(a):

Jest to dla mnie ciekawe. Uczę się javy i czesto mam problem z wyznaczaniem sobie kierunku nauki. Myślałem ze graficzne interfejsy to jedna z podstaw programowania .

Wchodzisz na strony z ogłoszeniami, szukasz ogłoszeń w ekosystemie javy i sprawdzasz co wymagają pracodawcy. Nigdzie nie znajdziesz JAvaFX.
Jedynym interfejsem graficznym który na starcie powinieneś dobrze poznać to ten w Intelij oraz wiersz poleceń (okienko jest? jest! więc chyba można to nazwać interfejsem rgaficznym ;p ) ;)

1

Powiem szczerze że nie zacząłem się uczyć JAvy / programowania akuart pod kątem kariery (tzn nie mowie nie kiedys moze), ale ogólnie zacząć programować od czegoś, wejść w ten świat (wcześniej miałem tylko chwile styczności z arduino, ale odłożyłem to na razie). Znalazłem kurs, i po prostu tu był temat o JavaFX to sobie sam założyłem polecenie do zrobienia, ale zaprzestanę skoro jest to ślepa uliczka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1