Threads Multiple Dialogboxen

Puenos

Neues Mitglied
Moinmoin, hallo erstmal :D

Aaaalso.. ich lern gerade Java, bzw bin gezwungen es zu lernen ;)
2. Projet, wie so oft.. is ein BMI-Rechner.
Geplant war, dass ich einfach 3 Dialoge aufpoppen lasse..
1. fragt nach der Größe,
2. fragt nach dem Gewicht
3. zeigt die Lösung an.

und in der Angabe steht noch dass mittels if/else Struktur entschieden werden können soll, ob man das Programm beenden und anschließend neustarten soll.

Jetzt bin ich aber soweit gekommen, dass ich original den ersten Dialog anzeigen lassen kann. Fin.
Der wird auch angezeigt, die Eingabe kann ich angeben. Aber sobald ich auf abbrechen oder OK klicke, tut sich nix mehr.
Sprich ich geh in Netbeans auf Run, Dialog poppt auf, Abbrechen/Ok und er schreibt quasi "passt alles".

Nur.. fehlen da ja noch die Box mit der Abfrage nach dem Gewicht und das Ergebnis?

und ich hab auch kP wie ich das umgehen kann, OHNE jetzt einen eigenen Dialog zu erstellen..
Dachte mir schon ich kann vielleicht per if/else angeben, dass wenn ich OK klicke, er das neue Fenster aufmacht, und ansonsten halt weiterfragt. also bei der 2. bei abbrechen wieder die 1. Anfrage stellt...

Iwo hab ich dann was von wegen Strings sind nicht thread safe gelesen, und dem invokeLater..aber ganz schlau werde ich da auch nicht wirklich drauß :/
So dass die 2. GUI-Anfrage nicht gestartet werden kann, wenn die 1. noch nicht abgearbeitet ist?
Deswegen dachte ich mir ich schreib das ganze evtl außerhalb der void, lass mir den Wert per return geben, und joa..
kein Plan.

Bisschen Hilfe/Erläuterung wär nett, danke Leute :D

Java:
import javax.swing.JOptionPane;

    public static void main (String[] args) 
    {  
        
    System.out.println("Welcome to your personal BMI calculator!");     
        String eingabe1 = JOptionPane.showInputDialog(null,"Bitte geben Sie Ihre Größe in m ein","Wie groß sind Sie?",JOptionPane.PLAIN_MESSAGE);
        float m = Float.parseFloat (eingabe1);
        
        String eingabe2 = JOptionPane.showInputDialog(null,"Bitte geben Sie Ihr Gewicht in kg ein","Wie viel wiegen Sie?",JOptionPane.PLAIN_MESSAGE);
        float kg = Float.parseFloat (eingabe2);
        float bmi = kg/(m*m);
        
        JOptionPane.showMessageDialog (null, "Ihr BMI ist" + bmi, "Results",JOptionPane.PLAIN_MESSAGE);
        
        System.exit(0);
    }
}
 

Nodiraa

Mitglied
Also bei mir funktioniert es. Nur die Umlaute werden nicht dargestellt.

Abbrechen funktioniert noch nicht, weil Du keine Funktionalität hinterlegt hast (NullPointerException)

Das Welcome wird natürlich nur auf der Konsole ausgegeben.
 
S

SlaterB

Gast
> und ich hab auch kP wie ich das umgehen kann, OHNE jetzt einen eigenen Dialog zu erstellen..

was läßt dich bei einem so strukturellen Problem vermuten, dass dein eigener Dialog helfen würde,
der könnte doch genauso an zweiter Stelle erscheinen, oder willst du dann alle Eingaben in einem Fenster haben?

die if/else-Debatte scheint auch fragwürdig, wenn das wie bisher gepostet nicht geht, warum dann darüber nachdenken?

----

du brauchst als erstens und einzig wirklich wichtiges in allen Programmen (selbst bei Hello World) eine Konsole in der du Ausgaben siehst,
nur notfalls durch eine GUI zu ersetzen,
schreibe zwischen jeden Befehl ein System.out.println() mit einer eindeutigen Ausgabe wie Zeilennummer,
ummantele jeden Befehl in der kritischen Region, soweit machbar, mit
try { } catch(Throwable t) { Ausgabe}

Befehle kommen nacheinander dran oder werden durch Exception/ Error abgebrochen, viel mehr gibts nicht in 99.99% aller Fälle
 

Puenos

Neues Mitglied
EDIT: Hab jetzt mal compiliert, versucht als .jar auszuführen, nen Fehler bekommen.. im Nachhinein hat er mir die 2. Dialogbox und die 3. aus dem Programmcode entfernt.
Nachträgliches Hinzufügen von Dialogbox 2 und 3 funktioniert problemlos...kA was das war :/

Also fehlt nur noch die if/else-Verknüpfung um das Programm neu abzufragen :)

Danke Leute :D




Was gibst du ein? Bekommst du vllt ne NumberFormatException?

naja, hab beim Input-Feld bisher 1.86, 1,86 und sogar 186 probiert. Fenster geht einfach zu und unten steht dann trotzdem nur "BUILD SUCCESSFUL (total time: 5 seconds)"

Also bei mir funktioniert es. Nur die Umlaute werden nicht dargestellt.

Abbrechen funktioniert noch nicht, weil Du keine Funktionalität hinterlegt hast (NullPointerException)

Das Welcome wird natürlich nur auf der Konsole ausgegeben.

bei dir kommen nacheinander 3 Dialoge? ôo
Ja soweit bin ich ja noch nicht, weil ich ja nichtmal nen 2. Dialog angezeigt bekomme...


> und ich hab auch kP wie ich das umgehen kann, OHNE jetzt einen eigenen Dialog zu erstellen..

was läßt dich bei einem so strukturellen Problem vermuten, dass dein eigener Dialog helfen würde,
der könnte doch genauso an zweiter Stelle erscheinen, oder willst du dann alle Eingaben in einem Fenster haben?

die if/else-Debatte scheint auch fragwürdig, wenn das wie bisher gepostet nicht geht, warum dann darüber nachdenken?

----

du brauchst als erstens und einzig wirklich wichtiges in allen Programmen (selbst bei Hello World) eine Konsole in der du Ausgaben siehst,
nur notfalls durch eine GUI zu ersetzen,
schreibe zwischen jeden Befehl ein System.out.println() mit einer eindeutigen Ausgabe wie Zeilennummer,
ummantele jeden Befehl in der kritischen Region, soweit machbar, mit
try { } catch(Throwable t) { Ausgabe}

Befehle kommen nacheinander dran oder werden durch Exception/ Error abgebrochen, viel mehr gibts nicht in 99.99% aller Fälle

Weil ich eben gelesen habe, dass mit Standarddialogboxen nur eine Aufgabe parallel abgearbeitet werden kann.. und als Alternative überall angeraten wird eine eigene Dialogbox zusammenzustellen.

Ja das if/else is ja laut Angabe eh nur für die Schleife zum neudurchlaufen da, aber dachte mir, vielleicht geht das über if/else bzw boolsche Operatoren :)

Zur Konsole..
In Netbeans seh ich unten ja eh, was die Konsole ausgibt..
das mit den Printbefehlen hab ich nun so gelöst:

Java:
public class Bsp2_1027570_1 {

    public static void main (String[] args) 
    {  
        
    System.out.println("Welcome to your personal BMI calculator!");     
        String eingabe1 = JOptionPane.showInputDialog(null,"Bitte geben Sie Ihre Größe in m ein","Wie groß sind Sie?",JOptionPane.PLAIN_MESSAGE);
            System.out.println("Input Größe");
        float m = Float.parseFloat (eingabe1);
            System.out.println("String to float");
        
        String eingabe2 = JOptionPane.showInputDialog(null,"Bitte geben Sie Ihr Gewicht in kg ein","Wie viel wiegen Sie?",JOptionPane.PLAIN_MESSAGE);
            System.out.println("Input Gewicht");
        float kg = Float.parseFloat (eingabe2);
            System.out.println("String to float");
        float bmi = kg/(m*m);
            System.out.println("Methode calc BMI");
        JOptionPane.showMessageDialog (null, "Ihr BMI ist" + bmi, "Results",JOptionPane.PLAIN_MESSAGE);
            System.out.println("Print Result");
        System.exit(0);
    }
}

jetzt hab ich das mal durchrennen lassen, und die Konsole spuckt mir folgendes aus:


run:
Welcome to your personal BMI calculator!
BUILD SUCCESSFUL (total time: 5 seconds)


das wars :)
Also nichtmal die println stehen mehr da

wie funktioniert das mit catch/throw/try? was macht das?
_______________________

Sry die späte Antwort, und vielen Dank schonmal :)
 
Zuletzt bearbeitet:
S

SlaterB

Gast
> Welcome to your personal BMI calculator!
der Text kommt vom ersten System.out.println, nicht möglicherweise von irgendwo anders? evtl. auch alten Code derselben Klasse?
ändere den Text testweise ruhig noch einmal

deinen Code kannst du vorerst auf Zeile 7 + 8 reduzieren,
solange das zweite System.out.println() nicht geklärt ist kann der ganze Rest vergessen werden,

wenn der erste Text zu sehen ist, sollten evtl. Exceptions normalerweise auch kommen, viel zu erwarten ist also nicht,
du kannst aber testweise
Java:
try {
  println "im try"
  Zeile 7+8
} catch(Throwable t) {
   println "im catch"
} finally {
 println "im finally"
}
schreiben, wie sieht es damit aus?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
E multiple Timer die sich nicht summieren Java Basics - Anfänger-Themen 12
JD_1998 Multiple Parametereingabe Java Basics - Anfänger-Themen 3
D [AES] input not multiple of 16 Java Basics - Anfänger-Themen 2
K RegEx - Multiple Line Java Basics - Anfänger-Themen 3
F Multiple Generics Java Basics - Anfänger-Themen 10
G Multiple Clients and one Server Java Basics - Anfänger-Themen 2
x22 Java Multiple Choice Test Java Basics - Anfänger-Themen 8
Dogge Multiple markers at line 15 Java Basics - Anfänger-Themen 13
U [Problem] Handling multiple frames Java Basics - Anfänger-Themen 5
G Multiple Leerzeichen entfernen Java Basics - Anfänger-Themen 13
J String zu Double parsen (multiple points) Java Basics - Anfänger-Themen 2
H Multiple Markers at this line Java Basics - Anfänger-Themen 3
S Threads Handling multiple different Threads Java Basics - Anfänger-Themen 7
H Multiple Fileaccess - sync? Java Basics - Anfänger-Themen 7
H Multiple JFrames im GUI Editor von NetBeans Java Basics - Anfänger-Themen 2
S jList Multiple Selection mit Klick Java Basics - Anfänger-Themen 2
C Multiple Choice Test Java Java Basics - Anfänger-Themen 5
T Multiple BufferedImage Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben