Hänger in Anwendung (war: An KonradN)

Juelin

Bekanntes Mitglied
Hallo Konrad,
ich habe ja de SLF4J Logger bei mir im Programm
und habe jetzt mal mit geloggt
In jeder Routine habe ich am Anfang und am Ende einen Logeintrag ausgegeben..
Logfile als PDF anbei.
Ich betätigte las letztes den Knopf1.
Wenn du dir das Logfile ansiehst ist das betätigen des Knopfes drin (Blau). (Start) (End) fehlt ja.
In der Routine wird dann der Knopf auf Visible = False gesetzt und dann die Y-position vom Tableview gesetzt. (Rot)
Nun müsste eigentlich die Abfrage mit dem Alert kommen, tut sie aber nicht.
Java:
    void knopf1Click(ActionEvent event)
        {
        int a;
        int c;
        int d;
        String x;
        if (Vital.mitLoggen)
            {
            logger1.info("################# <Vital.java><knopf1Click><Start>");  
            }
        if (Vital.datenbank.dbOpen)
            {
            if (stringgridRowNum == -1)
                {
                setAnzeigeText(2, "Erst Daten in Tabelle anklicken");
                }
            else
                {
                stringgridClick = Boolean.FALSE;  
                cursor_ = Cursor.cursor("WAIT");
                VitalController.scene4.setCursor(cursor_);
                Vital.datenbank.formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy", Locale.GERMAN);
                Vital.datenbank.dd1 = Vital.datenbank.formatter.format(Vital.datenbank.dgeburtsdatum);
                Vital.datenbank.formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy", Locale.GERMAN);
                Vital.datenbank.dd2 = Vital.datenbank.formatter.format(Vital.datenbank.ddatum);
                Vital.datenbank.formatter = DateTimeFormatter.ofPattern("HH:mm:ss", Locale.GERMAN);
                Vital.datenbank.dt = Vital.datenbank.formatter.format(Vital.datenbank.duhrzeit);
                stringgridRowNum = -1;
                setKnopfVisible(1, Boolean.FALSE);
                Alert alert1 = new Alert(Alert.AlertType.CONFIRMATION);
                alert1.setTitle("Abfrage");
                alert1.setHeaderText("Eintrag:\n"+Vital.datenbank.dvorname+" "+Vital.datenbank.dnachname+"\n"+
                                     "Geburtsdatum: "+Vital.datenbank.dd1+"\n"+
                                     "Datum: "+Vital.datenbank.dd2+" Uhrzeit: "+Vital.datenbank.dt+"\n"+
                                     "wirklich Meditindaten löschen?");
                alert1.setContentText("");
                ButtonType buttonTypeYes = new ButtonType("Ja");
                ButtonType buttonTypeNo = new ButtonType("Nein");
                alert1.getButtonTypes().setAll(buttonTypeYes, buttonTypeNo);
                Optional<ButtonType> result = alert1.showAndWait();
                if (result.get() == buttonTypeYes)
                    {
                    Vital.datenbank.formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
                    Vital.datenbank.dd1 = Vital.datenbank.formatter.format(Vital.datenbank.dgeburtsdatum);
                    Vital.datenbank.formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
                    Vital.datenbank.dd2 = Vital.datenbank.formatter.format(Vital.datenbank.ddatum);
                    Vital.datenbank.formatter = DateTimeFormatter.ofPattern("HH:mm:ss", Locale.ENGLISH);
                    Vital.datenbank.dt = Vital.datenbank.formatter.format(Vital.datenbank.duhrzeit);
                    Vital.datenbank.dbTabelle = "vital";
                    Vital.datenbank.dbBefehl = "DELETE FROM "+Vital.datenbank.dbTabelle+" WHERE Vorname = '"+Vital.datenbank.dvorname+"' AND Nachname = '"+Vital.datenbank.dnachname+"' AND Geburtsdatum = '"+Vital.datenbank.dd1+"' AND Datum = '"+Vital.datenbank.dd2+"' AND Uhrzeit = '"+Vital.datenbank.dt+"'";
                    Vital.datenbank.dbTabellenDelete();
                    if (Vital.datenbank.dbRet != 0)
                        {
                        setAnzeigeText(2, datenbank.FehlerAus());
                        }
                    }
                if (Vital.datenbank.dbRet == 0)
                    {
                    stringgridAnz = 1;
                    stringgridYPos = stringgridAnz * 35;
                    stringgridSetYPos();
                    stringgrid.getItems().clear();
                    VitalShowController.anzeintraege = 0;
                    setAnzeigeText(2, "");
                    VitalShowController.dLesArt = 2;
                    Vital.datenbank.dbBefehl = "SELECT * FROM "+Vital.datenbank.dbTabelle+" ORDER BY Nachname, Vorname, Geburtsdatum, Datum DESC, Uhrzeit DESC";
                    Platform.runLater(() -> lesenDatenbank(Vital.datenbank.dbBefehl));
                    }
                Thread bspThread = new Thread(new BspThread());
                bspThread.setPriority(1);
                bspThread.start();
                }
            stringgridClick = Boolean.TRUE;
            }
        if (Vital.mitLoggen)
            {
            logger1.info("################# <Vital.java><knopf1Click><End>");  
            }
        }

Keine Ahnung wieso!!!!!!

Hast Du da noch eine Idee?

Zip-File Projekt anbei.

Ein schönes Wochenende
Jürgen
 

Anhänge

  • Vital.log.pdf
    402,3 KB · Aufrufe: 0
  • projekt10.zip
    62,2 KB · Aufrufe: 0

Marinek

Bekanntes Mitglied
Hi,

ich finde das Posting geht in eine falsche Richtung. Das hier ist ja kein Konrad Forum, wo man öffentlich chatten kann... Sonst kannst du ihm eine Mail schreiben. Ich persönlich finde auch, dass ein Log immer eine txt Datei sein sollte und kein PDF. Gerade hier im Forum downloade ich grundsätzlich keine Dateien, so dass ich da nicht reinschauen kann. Ein Log kann man hier auch posten, wenn es mehr als 100 Zeilen hat, dann bringt das auch nix.

Wie dem auch sei: Offensichtlich wird eine bestimmte Methode nicht aufgerufen. Hier gibt es zwei Vorgehensweisen:

1. Logging nutzen
2. Debugger nutzen

Zu 1) Genau so wie in allen anderen Programmiersprachen (e.g. Delphie) ist es so, dass wenn ich an der falschen Stelle eine ein Logging setze, dass mir nix bringt, ich auch das Logging weglassen kann. Hier ist so ein Fall. Du hast das Logging an einer Stelle, die dich kaum weiterbringt.

Hier schlage ich vor das Log so zu verfeinern, dass man daraus erkennen kann, bis zu welcher Zeile oder welchem kleineren Block man kommt. Hier sollte man auch Zwischenergebnisse sinnvoll loggen.

Zu 2) Ich weiß nicht, welche IDE du benutzt, aber ich schlage vor sich hier passend zur IDE zu erkundigen, wie ein Debugger genutzt werden kann. Hier kann man sich das Log sparen und man kann sehen, bis wohin die Ausführung geht und warum sie abbricht. Dies ist gerade für so komplexe Programme, wie das hier vorliegende, unbedingt notwendig.

Hier noch eine Doku zu der Klasse Alert: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Alert.html

Gerade deine Überprüfung der Results sieht komisch aus, daher erwähne ich das hier.
Gruß,
Martin
 

KonradN

Super-Moderator
Mitarbeiter
Ja, die Posts direkt im Forum sind etwas unschön. Ich hatte es zuvor dann schnell löschen können, aber das ist nicht wirklich, wie das Forum genutzt werden sollte.

Das Problem ist, dass Du im Gespräch das Projekt nicht anhängen kannst? Wie wäre es, wenn ich Dir eine OneDrive Freigabe gebe, auf der Du Dateien hoch laden kannst? Dann würde man dieses Problem umgehen können.

Prinzipiell könnte man auch ein git Repository anlegen - falls Du Interesse hast, Dich da auch noch etwas einzuarbeiten? Wenn GitHub und Co Dir nicht zusagen (Da kannst auch ein privates Repository erstellen) könnte ich Dir auch auf meiner eigenen gitea Instanz einen Account einrichten.

Ansonsten ein paar Anmerkungen zum Logging:
a) In jeder Klasse hast Du ja eine Klassenvariable erstellt:
private static final Logger logger1 = LoggerFactory.getLogger(Vital.class);
Hier wäre aber das Vital.class immer anzupassen. In VitalDeleteController sollte es also VitalDeleteController.class sein. Denn beim Logging wird die Klasse immer mit angegeben aber bei Dir ist das derzeit immer com.juelin.projekt10.Vital

b) Du kommst bis zum Ende von stringgridSetYPos() und er kommt nicht mehr ins setAnzeigeText. Daher muss es bei diesen Zeilen sein:
Java:
                    stringgrid.getItems().clear();
                    VitalShowController.anzeintraege = 0;

Letzteres ist eine einfache Zuweisung - da passiert nichts. Also bleibt das getItems().clear().

Du hattest da sehr viele Einträge drin, oder? Da überlege ich, ob es evtl. einfach nur sehr lange dauert, alle Elemente zu löschen zumal es eine ObservableList ist und die TableView sich da ja anpassen will. Ich habe den Code nicht geprüft, aber das wäre ggf. eine Möglichkeit.

Statt dem clear() könntest Du einmal versuchen, einfach eine neue List zu setzen. Etwas wie:
Java:
ObservableList<Eintrag> neueListe = FXCollections.observableArrayList(new ArrayList<Eintrag>());
stringgrid.setItems(neueListe);

Wenn Du dann die Datenbankeinträge neu geladen hast, dann wäre die Liste natürlich wieder zu setzen.

Das ist aber nur ein Workaround. Besser wäre es, einfach nur die Einträge aus der Liste zu entfernen, die aus der Datenbank gelöscht wurden. Das müsste den geringsten Aufwand bedeuten.
 

Manul

Mitglied
Ein paar Anmerkungen zum Logging:
Java:
public class VitalDeleteController
    {
    ...
    private static final Logger logger1 = LoggerFactory.getLogger(Vital.class);
    ...
        if (Vital.mitLoggen)
            {
            logger1.info("################# <Vital.java><knopf1Click><Start>");  
            }
        ...
        if (Vital.mitLoggen)
            {
            logger1.info("################# <Vital.java><stringgridClicked><Start> >"+String.valueOf(stringgridClick)+"<");   
            }
-->
  1. Man sollte möglichst für jede Klasse eine eigene (passende) Loggerinstanz haben, also
    Code:
    ... LoggerFactory.getLogger(VitalDeleteController.class);
    usw. Sonst landet alles in einem Logfile und wenn dann auch noch die Meldungen uneindeutig/falsch sind viel Spaß beim Zuordnen.
  2. Laut Java-Konvention sollten "static final"-Felder möglichst (es gibt Ausnahmen, aber hier seh ich die nicht) Uppercase sein, also z.B.
    Code:
    private static final Logger LOG = LoggerFactory.getLogger(VitalDeleteController.class);
  3. Was du da machst ist klassisches Call-Tracing. Kann man machen wenns was bringt. Dafür gibt es aber eigentlich TRACE. Ins INFO-Log sollte sowas nicht.
  4. Das Log über ein statisches Boolean-Feld im Javacode zu steuern ist eher unschön. Normalerweise würde man die Logs immer mit dem für den jeweiligen Logeintrag passenden Loglevel schreiben und bei Bedarf das Log-Level für die Applikation bzw. Klasse ändern.
  5. Wenn du 1. beherzigst kannst du dir auch sparen jedesmal die Klasse nochmal ins Log zu schreiben. Die ist schon Teil des Log-Entries. Außerdem zeigt schon das obige Beispiel wie schnell sich dadurch Fehler einschleichen (Falsche Kategorie: Vital.java statt VitalDeleteController.java).
  6. Alle modernen Logger-Implementierungen unterstützen Platzhalter. Auch .toString() bzw. String.valueOf(...) muss man beim Logging effektiv nie aufrufen. Also einfach z.B.
    Code:
    LOG.trace("... stringgridClick: {}", stringgridClick);
  7. Und zu guter Letzt: Log-Enträge sollten stets sinnvolle Meldungen und einen Mehrwert für die Fehlersuche enthalten.
 
Zuletzt bearbeitet:

Manul

Mitglied
Ergänzend zu 3 (und da es auch schon erwähnt wurde): Ich würde hier auch eher empfehlen, sich mal mit dem Debugger vertraut zu machen, statt die kognitive Komplexität dieses schon jetzt eigentlich kaum noch wartbaren Codes mit zahlreichen Tracing-Log-Ausgaben noch weiter zu erhöhen.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Laufschrift-Hänger mit Java 8 AWT, Swing, JavaFX & SWT 13
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
P Swing Anwendung von LayeredPanel AWT, Swing, JavaFX & SWT 6
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
thor_norsk JavaFX Anwendung stürzt ab AWT, Swing, JavaFX & SWT 4
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
G JavaFX Steuerung bzw. Test von externer JavaFX Anwendung (liegt nur als jar vor) AWT, Swing, JavaFX & SWT 9
N JavaFX Vor beenden der Anwendung durch klicken von X Dialog zeigen AWT, Swing, JavaFX & SWT 1
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
B JavaFX Wie A4-Seite in meiner Anwendung repräsentieren AWT, Swing, JavaFX & SWT 6
B JavaFX JavaFX Anwendung deployen (entw als runnableJAR oder exe-Datei) AWT, Swing, JavaFX & SWT 15
OSchriever Anwendung aus SystemTray öffnen AWT, Swing, JavaFX & SWT 29
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
T Anwendung mit X schliessen AWT, Swing, JavaFX & SWT 1
L JavaFX OpenJFX13 Anwendung exportieren AWT, Swing, JavaFX & SWT 7
D PDF Viewer in SWT-Anwendung AWT, Swing, JavaFX & SWT 8
O Basics - Anwendung erstellen mit mehreren Szenen AWT, Swing, JavaFX & SWT 1
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
A JavaFX Anwendung in Jar Datei AWT, Swing, JavaFX & SWT 8
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
J Splashscreen Start Anwendung AWT, Swing, JavaFX & SWT 14
MiMa Programmeinstellungen für Anwendung?? AWT, Swing, JavaFX & SWT 54
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
I JFileChooser mit System L&F bei anderem L&F der eigtl. Anwendung AWT, Swing, JavaFX & SWT 0
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
L JavaFX PdfViewer für JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
D JafaFX Anwendung beenden AWT, Swing, JavaFX & SWT 11
B Wie erstelle ich eine JavaFX Anwendung von diesem Code? AWT, Swing, JavaFX & SWT 3
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
X Anwendung skalierbar AWT, Swing, JavaFX & SWT 3
D JavaFX Erkennen wenn eine Anwendung geschlossen wird und etwas tun? AWT, Swing, JavaFX & SWT 4
D JavaFX Anwendung hängt sich permanent auf AWT, Swing, JavaFX & SWT 6
L JavaFX Java FX Anwendung nach MVC mit Observer Pattern AWT, Swing, JavaFX & SWT 15
X Swing Anwendung regaiert auf keine Buttons mehr wärend while(scanner.hasNextLine()) ausgeführt wird. AWT, Swing, JavaFX & SWT 4
I Variabeln speichern in Desktop Anwendung AWT, Swing, JavaFX & SWT 2
V Anwendung im Vollbild zentrieren AWT, Swing, JavaFX & SWT 13
A Swing Textübergabe innerhalb der Anwendung in unterschiedlichen Fenster AWT, Swing, JavaFX & SWT 8
GreyFox JLabel in laufender Anwendung erzeugen AWT, Swing, JavaFX & SWT 6
J JavaFX Anwendung läuft in eclipse, nicht aber exportiert AWT, Swing, JavaFX & SWT 2
P Anwendung kommt nach minimieren nicht mehr in den Vordergrund AWT, Swing, JavaFX & SWT 5
K 3D-Grafik Anwendung von Java in Gnuplot AWT, Swing, JavaFX & SWT 3
M SWT Anwendung in der Symbolleiste verstecken AWT, Swing, JavaFX & SWT 5
B SWT Redesign SWT Anwendung AWT, Swing, JavaFX & SWT 7
M Java anwendung VOR vollbildspielen (schon wieder...) AWT, Swing, JavaFX & SWT 5
S Swing Lauftext Performance Probleme, in größerer Anwendung AWT, Swing, JavaFX & SWT 6
VfL_Freak Swing Zweiter Monitor von Java-Anwendung ansprechbar ?? AWT, Swing, JavaFX & SWT 2
S Swing Ist meine gute Java Anwendung vorgängig? AWT, Swing, JavaFX & SWT 20
P Klassenaufbau bei komplexerer GUI Anwendung AWT, Swing, JavaFX & SWT 14
S Java GUI Anwendung ohne Konsole starten AWT, Swing, JavaFX & SWT 6
qwerqer Swing Anwendung soll blinken (Taskleiste) AWT, Swing, JavaFX & SWT 3
R Java Desktop Anwendung erstellen. Womit? AWT, Swing, JavaFX & SWT 3
eLogic Fullscreen anwendung aus der man nicht rauskommt AWT, Swing, JavaFX & SWT 37
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
H Anwendung schließen ohne System.exit AWT, Swing, JavaFX & SWT 5
R Anwendung ohne Symbol in der Taskleiste AWT, Swing, JavaFX & SWT 3
H SWT RAP Anwendung - Tabelle - Theming AWT, Swing, JavaFX & SWT 3
alderwaran Swing XML editor plugin für eigene anwendung AWT, Swing, JavaFX & SWT 2
G Swing Update-Funktion für Swing-Anwendung AWT, Swing, JavaFX & SWT 5
C Swing Eine SWING-Anwendung mittels MVC AWT, Swing, JavaFX & SWT 4
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
B SWT Hello World-Anwendung mit GUI in Eclipse -Problem mit Import von SWT AWT, Swing, JavaFX & SWT 9
G Applet und Swing Anwendung AWT, Swing, JavaFX & SWT 2
J Client Server Anwendung - Mehrere Clients in einer Server GUI AWT, Swing, JavaFX & SWT 11
F Anwendung auf Teskleiste legen AWT, Swing, JavaFX & SWT 3
B MDI Anwendung alle maximierten InternalFrames in Tabs AWT, Swing, JavaFX & SWT 3
T Anwendung starten AWT, Swing, JavaFX & SWT 5
J Anwendung von Swing nach SWT bzw. Eclipse portieren AWT, Swing, JavaFX & SWT 3
2 Tablet-PC Java-Anwendung -> Tablet-Pen Problem !! AWT, Swing, JavaFX & SWT 3
J Swing Anwendung schließen im Listener AWT, Swing, JavaFX & SWT 3
isowiz Vorteil einer RCP Anwendung gegenüber Swing AWT, Swing, JavaFX & SWT 3
? Java-SWT-Anwendung in der Taskleiste nicht sichtbar AWT, Swing, JavaFX & SWT 6
H Netbeans-Anwendung schliessen AWT, Swing, JavaFX & SWT 8
M "Billig Excel" Anwendung mit Swing - Aufwand ? AWT, Swing, JavaFX & SWT 4
G "Views-Abwechseln-Pro " in RCP-Anwendung AWT, Swing, JavaFX & SWT 2
H PopUp-Fenster in einer Java Server Faces Anwendung AWT, Swing, JavaFX & SWT 4
T Auf Fenster innerhalb der Anwendung zugreifen-auch elegant? AWT, Swing, JavaFX & SWT 2
G Organisation Anwendung mit mehreren Eingabedialogen AWT, Swing, JavaFX & SWT 3
H JWindow schließen bei einem Klick außerhalb der Anwendung? AWT, Swing, JavaFX & SWT 19
G SWT DatePicker funzt nicht in eigener Anwendung AWT, Swing, JavaFX & SWT 5
E Bestehende Anwendung erweitern ->JFrame in JPanel verpack AWT, Swing, JavaFX & SWT 4
U Anwendung nicht beenden beim form schliessen? AWT, Swing, JavaFX & SWT 6
T "Echte" MDI Anwendung AWT, Swing, JavaFX & SWT 4
G Auf markierten Text einer anderen Anwendung zugreifen. AWT, Swing, JavaFX & SWT 8
G Relativer Pfad in Rich Client Anwendung AWT, Swing, JavaFX & SWT 4
N Keyboard-Shortcut, der in der ganzen Anwendung funktioniert AWT, Swing, JavaFX & SWT 2
D JDIC Browser in SWT/JFace Anwendung nutzen AWT, Swing, JavaFX & SWT 2
J Swing-Anwendung mit ActionListener AWT, Swing, JavaFX & SWT 7
S Anwendung über Button beenden? AWT, Swing, JavaFX & SWT 4
O Anwendung aus dem Programm heraus neu starten AWT, Swing, JavaFX & SWT 2
U Anwendung mit mehreren "Fenstern" AWT, Swing, JavaFX & SWT 4
R Screenshot von fremder Anwendung AWT, Swing, JavaFX & SWT 4
Hotkey Freie Icons für Anwendung mit Java Look&Feel AWT, Swing, JavaFX & SWT 4
S SWT-Anwendung als startfähiges Jar unter Linux AWT, Swing, JavaFX & SWT 4
P GUI geschickt von dem Rest der Anwendung trennen AWT, Swing, JavaFX & SWT 6
S HTML-Datei in Anwendung (JEditorPane) AWT, Swing, JavaFX & SWT 5
A Screenshot einer Anwendung erstellen AWT, Swing, JavaFX & SWT 14
A MVC-Pattern - Kreuzweise Anwendung? AWT, Swing, JavaFX & SWT 4
M Komponenten einer Anwendung in JTree strukturiert auflisten? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben