• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen)

P

PinkMuffin

Bekanntes Mitglied
Hallo,
ich mach im Moment Studienaufgaben für das nächste Semester und eine der Aufgaben ist es, einen Chatbot zuerst zu schreiben und dann hinterher ein Gui dazu zu erstellen. Ich nehme mal an, dass sie uns dadurch gleich dazu kriegen wollen, das sinnvoll zu trennen, allerdings habe ich dabei noch ein paar Schwierigkeiten.
Im Moment hängt sich jedes mal mein Programm auf, sobald ich auf den Button klicke, das Fenster lässt sich dann auch nicht mehr schließen.

Gui:
            public Gui(Chatbot bot)
            {
                this.bot = bot;
                frame = new JFrame("Example");
                frame.setBounds(0, 0, 600, 400);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                textArea = new JTextArea();
                textArea.setEditable(false);
                textField = new JTextField(48);
                button = new JButton("senden");
                button.addActionListener(new ActionListener()
                        {
                            @Override
                            public void actionPerformed(ActionEvent arg0)
                            {
                                appendText(textField.getText());   
                                bot.eingabe = textField.getText();   
                                textField.setText(null);                           
                                bot.auswahl();
                            }
                        }) ;
                southPanel = new JPanel();
                southPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
                southPanel.add(textField);
                southPanel.add(button);
                frame.getContentPane().add(textArea, BorderLayout.CENTER);
                frame.getContentPane().add(southPanel, BorderLayout.SOUTH);             
            }

Java:
public class Chatbot
{
    public static String eingabe;
    public static String benutzer = "Benutzer";
        
    //Methode "starten" entfernt, da hier alles funktioniert
    
    public void auswahl()
    {
        boolean weiter = true;
        do
        {
            
            System.out.println("Botti:"+"\t"+"\t"+"Wie kann ich dir helfen? (gebe "+ "\"help\""+ " ein, um mögliche Funktionalitäten anzuzeigen.)");
            System.out.print(benutzer +":");
            
            switch(eingabe)
            {
            case "help":
                help();
                break;
            case "ssp":
                spieleSSP();
                break;
            case "rechnen":
                berechneSumme();
                break;
            case "der wievielte ist heute?":
                sageDatum();
                break;
            case "wie viel uhr ist?":
                sageUhrzeit();
                break;
            case "stop":
                weiter = false;
                System.out.println("Botti:"+"\t"+"\t"+"Ich wünsche dir noch einen schönen Resttag, " + benutzer+".");
                break;
            default:
                System.out.println("Botti:"+"\t"+"\t"+"Die Eingabe ist ungültig, bitte versuche es erneut.");
            
            }
            
            
        }while (weiter);
            
    }

Der ActionListener von button führt keine einzige seiner Aktionen aus, wobei appendText und textField.setText(null); funktioniert haben, bevor ich versucht habe, die Eingabe über das TextField zu befüllen.
 
F

fhoffmann

Top Contributor
Im Moment hängt sich jedes mal mein Programm auf, sobald ich auf den Button klicke
Das Programm hängt so lange, wie die Methode "actionPerformed" läuft (auch die Oberfläche wird dann nicht neu gemalt).
Da du in "actionPerformed" die Methode "auswahl" aufrufst, die dann wiederum weitere Methoden aufruft, wird wahrscheinlich "actionPerformed" nie beendet.
 
P

PinkMuffin

Bekanntes Mitglied
Ok, logisch. Mit einem repaint innerhalb von "actionPerformed" ging es allerdings auch nicht, und auch das Fenster lässt sich nicht schließen, müsste das nicht unabhängig dazu laufen? Weil ich kann es sonst ja auch an jedem beliebigen Punkt schließen.
Da du in "actionPerformed" die Methode "auswahl" aufrufst, die dann wiederum weitere Methoden aufruft, wird wahrscheinlich "actionPerformed" nie beendet.
Ich frage mich halt, wie ich es dann lösen sollte. Meine auswahl Methode ist auf die Eingabe im JTextField angewiesen..
 
kneitzel

kneitzel

Top Contributor
Wenn die GUI blockiert ist, dann ist diese blockiert. Da kann diese auf nichts mehr reagieren. Das Fenster schließen ist ja auch nur ein Event in der Event-Queue, das besagt: Fenster soll geschlossen werden. Und so lange diese Event nicht bearbeitet wird, passiert nichts!

Generell: Von der GUI aus machst Du nichts, das irgendwie länger dauern könnte oder gar blockiert.

Dieses Auswahl ist aber doch eine blockierende Abfrage auf der Konsole - das hat doch in einer GUI nichts verloren! Also ganz klar ein Design-Fehler.
 
P

PinkMuffin

Bekanntes Mitglied
Dieses Auswahl ist aber doch eine blockierende Abfrage auf der Konsole - das hat doch in einer GUI nichts verloren! Also ganz klar ein Design-Fehler.
Ja, soweit hat es fhoffmann ja auch erklärt, ich hab ja selbst gesagt, dass ich nicht genau weiß, wie man das mit der Kommunikation zwischen dem GUI und dem eigentlichem Programm besser lösen kann, daher frage ich ja. Vom Programm zum GUI hab ich dazu einen guten Beitrag gefunden, die andere Richtung ist allerdings (wie man sieht) etwas problematisch.
 
kneitzel

kneitzel

Top Contributor
Alles, was bisher konsole I/O war, kommt komplett in den Müll.

Und dann überlegst Du Dir erst einmal:
- Wie soll die Oberfläche aussehen?
- Was soll passieren, wenn der Anwender bestimmte Aktionen ausführt?

Wenn es eine Texteingabe geben soll, dann kannst Du dazu ein Textfeld nutzen. Aber die Auswertung erfolgt dann über Button-Click oder Return oder .... (Musst Du festlegen).

Und dann reagiert du und machst, was getan werden soll (so es kurz und schnell ist), also z.B. bei "Datum" gibst Du irgendwo das Datum aus.
 
P

PinkMuffin

Bekanntes Mitglied
Danke, ich glaube das hat mir einiges weitergeholfen. Ich hab es jetzt so geändert, dass der bot ein gui kennt, bei dem er in die TextArea schreiben kann, soweit war es ja erstmal unkompliziert.
Java:
    public synchronized void chatbotStarten() throws InterruptedException
    {
        Scanner scan = new Scanner(System.in);
        
        // Systemuhrzeit wird ausgelesen und eine entsprechende Begrüßung ausgegeben
        SimpleDateFormat df = new SimpleDateFormat("HH");
        String time = df.format(new Date());
        int zeit = Integer.parseInt(time);
        if(zeit<=11 && zeit>=0 )
        {
            gui.appendText("Botti:"+"\t"+"\t"+"Guten Morgen");
        }
        else if(zeit >=12 && zeit<=17)
        {
            gui.appendText("Botti:"+"\t"+"\t"+"Guten Tag");
        }
        else if(zeit>=18 && zeit >=23)
        {
            gui.appendText("Botti:"+"\t"+"\t"+"Guten Abend");
        }
        else
        {
            gui.appendText("Botti:"+"\t"+"\t"+"Hallo");
        }
        gui.appendText("Botti:"+"\t"+"\t"+"Ich bin Botti, wie ist dein Name?");
        gui.appendText(benutzer +":"+ "\t");       
    }

Die "auswahl" ist jetzt Aufgabe des Gui,
Java:
            button.addActionListener(new ActionListener()
                    {

                        @Override
                        public void actionPerformed(ActionEvent arg0)
                        {
                            String eingabe = textField.getText();
                            appendText(textField.getText());
                            if(buttonCount==0)
                            {
                                bot.begruessung(textField.getText());
                            }
                            else
                            {
                                    switch(eingabe)
                                    {
                                        case "help":
                                            bot.help();
                                            break;
                                        case "ssp":
                                            bot.spieleSSP();
                                            break;
                                        case "rechnen":
                                            bot.berechneSumme();
                                            break;
                                        case "der wievielte ist heute?":
                                            bot.sageDatum();
                                            break;
                                        case "wie viel uhr ist?":
                                            bot.sageUhrzeit();
                                            break;
                                        case "stop":
                                            System.out.println("Botti:"+"\t"+"\t"+"Ich wünsche dir noch einen schönen Resttag, " + bot.benutzer+".");
                                            break;
                                        default:
                                            System.out.println("Botti:"+"\t"+"\t"+"Die Eingabe ist ungültig, bitte versuche es erneut.");           
                                    }
                            }   
                            textField.setText(null);
                            buttonCount++;
                        }
                        
                
                    });

Allerdings entsteht jetzt immer dann ein Problem, wenn innerhalb einer Funktion erneut eine Eingabe (also ein Abruf von textField) nötig wäre..
Dadurch, dass der erste Klick nicht abgeschlossen werden kann (weil die Funktion darin ja noch läuft) und für den Abschluss ein weiterer Klick notwendig wäre, wegen der Eingabe, weiß ich nicht ganz, was ich machen kann. Ich möchte es eigentlich bei diesem einen Button belassen.
 
kneitzel

kneitzel

Top Contributor
Du musst Dir überlegen, wie du diese Eingabe machen möchtest. Es ist immer das Gleiche: Du passt nur die UI an um dann deine Änderungen abzuschließen.

Was bei weiteren Abfragen z.B. verwendet werden kann ist ein (ggf. modaler) Dialog.

Schau Dir doch einfach mal aktiv diverse Oberflächen an. Was passiert denn da? Wie bedient man ein Programm? Mach es Dir bewusst! Also einfacher Editor und Du speicherst ... Dann kommt ein Fenster, das dich nach Dateiname und Ort fragt...
 
P

PinkMuffin

Bekanntes Mitglied
Aber genau hier hört doch mein Verständnis auf, da hilft dann eben kein "Mach es Dir bewusst" mehr.
Letzteres (Datei abspeichern) habe ich bereits einmal programmiert. Ich habe auch schon eine Authentifizierung vor einem Programm programmiert (also nach Benutzername und Passwort gefragt), aber der Unterschied ist, dass ich da immer neue Frames geöffnet und dann nach der Eingabe discarded habe (ein Button war also immer für genau eine Eingabe zuständig), gerade das möchte ich ja vermeiden.
Soweit ich das verstehe, würde bei einem Dialog das gleiche in grün passieren (durch das Buttonevent würde ein Dialog ausgelöst, der wiederum nach der weiteren Eingabe fragt, beliebig tief verschachtelt), oder verstehe ich das falsch?
 
kneitzel

kneitzel

Top Contributor
Irgendwo musst Du Ausgabe und Eingabe plazieren. Wenn es kein neues Fenster sein soll, dann muss es im aktuellen Fenster sein.

Findet sich doch auch regelmäßig. Die IDE Deiner Wahl wird dies vermutlich ständig machen. Da wird dann einfach ein Bereich für Ausgabe/Eingabe verwendet...

Hier ist halt wichtig: Wie soll sich die Applikation verhalten - das kannst nur Du vorgeben. Du kannst Dazu z.B. Skizzen auf Papier machen. Wie soll das Fenster aussehen? Und wenn dann auf einen Knopf gedrückt wird oder irgend was anderes passiert: Wie soll es dann aussehen? Dieses Verhalten musst Du festlegen. Das können wir dir auch nicht sagen, denn wir wissen nicht, was für Anforderungen du umsetzen musst.

Wenn Du es wie eine Console 1:1 umsetzen willst, dann kannst Du z.B. genau das abbilden:
- Du hast einen Textbereich, der die Ausgabe zeigt.
- Eine Eingabe-Box ist da.

Und dann kannst Du da alle Abfragen anzeigen:
Dann fügst Du bei der Ausgabe hinzu (oder ersetzt diese) durch eine Frage:....
"Wie alt bist du?"
Und dann kann man da im Eingabebereich etwas eingeben.
Du hast dann halt bei der Auswertung der Eingabe eine Art status, der Dir sagt: Was soll dies sein? Also weisst Du, dass gerade ein Alter erwartet wird. Wenn da nun keine Zahl steht, dann kannst Du meckern: "Das war keine Zahl". Oder wenn da Unsinn steht a.la. 1000 oder -17, dann kannst Du sagen: "So alt kann man nicht sein!"
 
P

PinkMuffin

Bekanntes Mitglied
Irgendwo musst Du Ausgabe und Eingabe plazieren. Wenn es kein neues Fenster sein soll, dann muss es im aktuellen Fenster sein.

Findet sich doch auch regelmäßig. Die IDE Deiner Wahl wird dies vermutlich ständig machen. Da wird dann einfach ein Bereich für Ausgabe/Eingabe verwendet...

Hier ist halt wichtig: Wie soll sich die Applikation verhalten - das kannst nur Du vorgeben. Du kannst Dazu z.B. Skizzen auf Papier machen. Wie soll das Fenster aussehen? Und wenn dann auf einen Knopf gedrückt wird oder irgend was anderes passiert: Wie soll es dann aussehen? Dieses Verhalten musst Du festlegen. Das können wir dir auch nicht sagen, denn wir wissen nicht, was für Anforderungen du umsetzen musst.
Wie gesagt, dass habe ich doch alles bereits festgelegt und komme an der Stelle eben nicht weiter:
Ich habe eine Ausgabe in der TextArea, die funktioniert auch soweit.
Ich habe eine Eingabe durch ein JTextField, das funktioniert eben nur mehr oder weniger.
Ein Button soll die Eingabe aus dem TextField an den Chatbot übergeben und in die TextArea schreiben und es muss mehrfach eine Eingabe möglich sein und an dieser Stelle funktioniert es nicht mehr.
Der Chatbot wartet nicht auf die Eingabe vom Button, sondern zieht nach einmaliger Eingabe sein ganzes Programm durch, wodurch logischerweise Fehler auftreten.
Also hab ich gedacht, die Methoden werden einfach nur noch vom Button ausgelöst, dann muss der Bot ja "warten", aber dadurch entsteht obiges Problem, dass der Button im gedrückten Zustand bleibt und eine neue Eingabe nicht möglich ist. Eigentlich will ich nur, dass der Bot an jeder Eingabestelle wartet, bis der Button eine neue Eingabe übergibt.
 
kneitzel

kneitzel

Top Contributor
Du hast den Chatbot somit nicht wirklich von der bisherigen UI (=Konsole) getrennt.

Da musst Du den ChatBot anpassen, damit der eben nichts ausgibt und keine Eingabe einfordert. Das darf nicht sein. Alle Konsolen-Aus/Eingabe muss komplett verschwinden.
 
P

PinkMuffin

Bekanntes Mitglied
Irgendwie bin ich aus den Beiträgen nur so mäßig schlau geworden, vielleicht ist meine Frage einfach unklar oder ich stehe besonders ausdauernd auf dem Schlauch..

Ich habe jetzt das UI und den Chatbot jetzt vollständig voneinander getrennt, ich hab mal gelesen, dass man das mit einem Controller machen kann, aber meine Lösung fühlt sich einfach grundlegend unpraktisch an, deshalb kann ich irgendwie nicht glauben, dass es da nicht ein BestPractise gibt..
Besonders bei den Mehrfacheingaben habe ich einen sehr uneleganten workaround gemacht, indem jetzt der Button überprüft, wie die vorherige Eingabe war und ob aufgrund der vorherigen Eingabe jetzt zwangsweise eine andere Abfrage folgen muss.

Der Chatbot (nur die Funktionen für SchereSteinPapier, da hier das Problem liegt):
    public String spieleSsp2(String eingabe)
    {
        Random zufall = new Random(); //nextInt gibt Zahl zwischen 0 und ... aus, daher "+1"
        int computerWahl = zufall.nextInt(3)+1;
        int spielerWahl = Integer.parseInt(eingabe);
        String returnString="";
        switch(spielerWahl)
        {
        case 1:
            switch(computerWahl)
            {
            case 1:
                returnString=("Botti:"+"\t"+"\t"+"Oh, ich habe auch die Schere. Das heißt wohl unentschieden"+"\n");
                break;
            case 2:
                returnString=("Botti:"+"\t"+"\t"+"Ha! Ich habe den Stein. Du hast verloren."+"\n");
                break;
            case 3:
                returnString=("Botti:"+"\t"+"\t"+"Sowas Doofes. Ich hab das Papier. Da hast du wohl gewonnen."+"\n");
                break;
            }
            break;
        case 2:
            switch(computerWahl)
            {
            case 1:
                returnString=("Botti:"+"\t"+"\t"+"Sowas Doofes. Ich hab die Schere. Da hast du wohl gewonnen."+"\n");
                break;
            case 2:
                returnString=("Botti:"+"\t"+"\t"+"Oh, ich habe auch den Stein. Das heißt wohl unentschieden"+"\n");
                break;
            case 3:
                returnString=("Botti:"+"\t"+"\t"+"Ha! Ich habe das Papier. Du hast verloren."+"\n");
                break;
            }
            break;
        case 3:
            switch(computerWahl)
            {
            case 1:
                returnString=("Botti:"+"\t"+"\t"+"Ha! Ich habe die Schere. Du hast verloren."+"\n");
                break;
            case 2:
                returnString=("Botti:"+"\t"+"\t"+"Sowas Doofes. Ich hab den Stein. Da hast du wohl gewonnen."+"\n");
                break;
            case 3:
                returnString=("Botti:"+"\t"+"\t"+"Oh, ich habe auch das Papier. Das heißt wohl unentschieden"+"\n");
                break;
            }
            break;
        case 42:
            returnString=("Botti:"+"\t"+"\t"+"Du hast die Antwort auf den Sinn des Lebens gefunden. Nun müsstest du nur noch die Frage wissen.."+"\n");
            break;
        default:
            returnString=("Botti:"+"\t"+"\t"+"Wenn du falsche Zahlen wählst, können wir nicht spielen, Schummler verlieren immer."+"\n");
            break;
        }
        
        return returnString;
    }

Der Bot kennt kein UI und umgekehrt, dafür hab ich den Zwischenschritt Controller eingeführt

Controller (ebenfalls nur der SSP-Ausschnitt):
public class Controller
{
    private Chatbot bot;
    private UI ui;
    public String vorher="";
    public Controller(Chatbot bot)
    {
        this.bot = bot;
        ui = new UI(this);
        ui.appendText(bot.chatbotStarten());       
    }
        
    public void ssp1Starten()
    {
        ui.appendText(bot.spieleSSp1());
    }
    
    public void ssp2Starten()
    {
        ui.appendText(bot.spieleSsp2(eingabe));
    }

In der UI ist jetzt das Konstrukt, das mir auf die Nerven geht: die Variable "vorher" und der buttonCounter.
Der ButtonCounter ist benötigt, da man die Variable Benutzer ja ausschließlich beim ersten mal setzt. Das "vorher" ist dazu da, um SSP-Spiele oder berechnungen zu ermöglichen.
Der ActionListener vom Button:
       button.addActionListener(new ActionListener()
                {

                    @Override
                    public void actionPerformed(ActionEvent arg0)
                    {
                    
                        eingabe = textField.getText();
                        appendText(benutzer +"\t"+"\t"+eingabe);
                        ctg.eingabe = eingabe;
                        textField.setText(null);       
                        if(buttonCounter==0)
                        {
                            benutzer = eingabe;
                            ctg.begruessungStarten(eingabe);
                        }
                        else if(ctg.vorher.equals("ssp"))
                        {
                            ctg.vorher="";
                            ctg.ssp2Starten();
                        }
                        else if(ctg.vorher.equalsIgnoreCase("rechnen"))
                        {
                            ctg.vorher="rechnen2";
                            ctg.berechneSumme2Starten();
                        }
                        else if(ctg.vorher.equalsIgnoreCase("rechnen2"))
                        {
                            ctg.vorher ="";
                            ctg.berechneSumme3Starten();
                        }
                        else
                        {
                            eingabe = eingabe.toLowerCase();
                            switch(eingabe)
                            {
                            case "help":
                                ctg.helpStarten();
                                break;
                            case "ssp":
                                ctg.vorher="ssp";
                                ctg.ssp1Starten();
                                break;
                            case "rechnen":
                                ctg.vorher = "rechnen";
                                ctg.berechneSumme1Starten();
                                break;
                            case "der wievielte ist heute?":
                                ctg.sageDatumStarten();
                                break;
                            case "wie viel uhr ist?":
                                ctg.sageUhrzeitStarten();
                                break;
                            case "stop":
                                appendText("Botti:"+"\t"+"\t"+"Ich wünsche dir noch einen schönen Resttag, " + "benutzer"+".");
                                frame.dispose();
                                break;
                            default:
                                appendText("Botti:"+"\t"+"\t"+"Die Eingabe ist ungültig, bitte versuche es erneut.");           
                            }
                        }
                        buttonCounter++;
                    }
Es funktioniert alles, daher danke für den Denkanstoß @kneitzel , aber irgendwie habe ich immer noch das Gefühl, dich nicht ganz richtig verstanden zu haben, oder würde man das im Allgemeinfall so lösen?
 
kneitzel

kneitzel

Top Contributor
Also die generelle Idee ist durchaus richtig. Aber die Implementierung wird in der Regel etwas anders aufgebaut.

Was man in der Informatik gerne hat, ist sowas wie eine "State Machine": https://de.wikipedia.org/wiki/Endlicher_Automat

Und je nachdem, in was für einem Zustand du bist, wird halt etwas anderes gemacht.

Dabei würde ich noch sagen: Diese Darstellung als Automat ist einfach nur eine Formalisierung. Streng genommen hast Du etwas ähnliches bei jedem if. Du prüfst halt den Zustand um dann irgend etwas zu entscheiden... Man kann es also zur Darstellung von Algorithmen nutzen.

Und je nachdem, was man braucht, kann man dies aber auch prinzipiell so oder ähnlich auch in Klassen gießen. Dann hätte Dein Client einen Zustand und je nach Eingabe wechselt er den Zustand.

Grundzustand:
- "rechnen" --> Rechnerzustand
- ....
- "stop" --> ENDE

Beim Rechnerzustand hast Du dann halt wieder die Auswertung von Eingaben mit unterzuständen ... Du hast also einen START von dem aus du in (Eingabe erste Zahl) gehst. Durch Eingabe einer Zahl kommst Du zu (Eingabe Operand) und nach Eingabe des Operanden kommst du zu (Eingabe zweite Zahl). Sobald die eingegeben wurde, rechnest Du, gibst das Ergebnis aus und wechselst in den Grundzustand.
Nur um mal etwas grob zu skizzieren.

Wie man das genau modellieren könnte, könnte man sich überlegen....

Jeder Knoten hat eine Liste von Aktionen.
Diese Aktion hat ein Ergebnis (welches z.B. immer ein String sein könnte).
Jeder Knoten hat eine Map von Predicate<String> zu Folgeknoten.

Aktionen können diverse Elemente sein, die die GUI ausführen kann:
- Irgend etwas aufrufen - dann gibt es konkreten Code, der ausgeführt wird mit einem definierten Interface (So kann etwas mitgegeben werden um z.B. Dinge auszugeben)
- Eingabe - Wenn sowas gefordert wird, dann:
-> wird die Eingabe aktiviert (Also bei einer Oberfläche z.B. eine Inputbox eingeblendet, aktiviert, was weiss ich und das war es... erst bei einem bestimmten Event (Button, Return, ...) wird die Eingabe ausgewertet und die Abarbeitung geht weiter ..

Also es gibt viele Möglichkeiten - da kann ich auch nicht sagen, was richtig oder falsch ist. Generell ist es auch ok, einfach irgendwelche Variablen zu prüfen um dann bestimmte Dinge zu machen oder eben nicht zu machen.... Ich wollte nur grob Skizzieren, wie es aussehen könnte ...
 
P

PinkMuffin

Bekanntes Mitglied
Achso okay, danke.
Dann schau ich mir die State Machine mal spaßeshalber vor dem Theorieunterricht an, aber für eine kleine Anwendung wie mein Bot war das if vielleicht sogar unkomplizierter, ich war nur etwas irritiert, weil ein Lehrer mal gesagt hat, dass wenn man zu viele ifs für eine Sache verwendet, man die Sache meist falsch angeht.
 
kneitzel

kneitzel

Top Contributor
Achso okay, danke.
Dann schau ich mir die State Machine mal spaßeshalber vor dem Theorieunterricht an, aber für eine kleine Anwendung wie mein Bot war das if vielleicht sogar unkomplizierter, ich war nur etwas irritiert, weil ein Lehrer mal gesagt hat, dass wenn man zu viele ifs für eine Sache verwendet, man die Sache meist falsch angeht.
Ja, aber das ist dann eher ein Zeichen, dass man es auch unterteilen und aufteilen sollte. Aber das ändert nichts an der eigentlichen Problematik
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Swing Programm hängt sich auf! AWT, Swing, JavaFX & SWT 23
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
J Programm hängt sich bei Log In auf AWT, Swing, JavaFX & SWT 1
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
R GUI hängt während Programm läuft AWT, Swing, JavaFX & SWT 7
T Java Runtime.exec per JButton auslösen -> Programm hängt AWT, Swing, JavaFX & SWT 10
M DragAndDrop - aus Browser ins Programm AWT, Swing, JavaFX & SWT 6
T Java GUI - Würfel Programm AWT, Swing, JavaFX & SWT 6
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
I Gui in bestehendes Java-Programm AWT, Swing, JavaFX & SWT 11
L JavaFX IntelliJ Standalone Programm exportieren AWT, Swing, JavaFX & SWT 9
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
M AWT Programm in den Tray minimieren AWT, Swing, JavaFX & SWT 2
steven789hjk543 Swing Weiß jemand, warum dieses Programm nicht funktioniert? AWT, Swing, JavaFX & SWT 7
A Java Programm gestalten AWT, Swing, JavaFX & SWT 4
P Swing Warum startet das Programm nicht? AWT, Swing, JavaFX & SWT 3
J JavaFX Kamera im Programm öffnen AWT, Swing, JavaFX & SWT 6
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
J Verbesserungsvorschläge?! Kleines AWT Programm AWT, Swing, JavaFX & SWT 4
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
Arif Swing Programm friert ein... AWT, Swing, JavaFX & SWT 2
apple_pie1998 Programm gibt plötzlich exceptions aus. AWT, Swing, JavaFX & SWT 4
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
X JMenu Menu-Bar ausrichtung ändern im Programm AWT, Swing, JavaFX & SWT 0
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
G Programm GUI erstellen AWT, Swing, JavaFX & SWT 5
T Programm im METRO Design? AWT, Swing, JavaFX & SWT 1
C Programm mit Passwort schließen AWT, Swing, JavaFX & SWT 5
D Robot Programm mit Escape abbrechen (aus Eclipse heraus) AWT, Swing, JavaFX & SWT 2
N Programm läuft perfekt in Eclipse aber nicht in .JAR AWT, Swing, JavaFX & SWT 3
J Programm im GUI ausführen AWT, Swing, JavaFX & SWT 4
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
S Event Handling konsole Programm mit Tastendruck beenden AWT, Swing, JavaFX & SWT 5
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
W Windows Fenster in einem Programm AWT, Swing, JavaFX & SWT 2
F Mal Programm AWT, Swing, JavaFX & SWT 13
C In Hauptfenster Programm-Klassen implementieren AWT, Swing, JavaFX & SWT 9
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
C Swing Wie kann ich im Programm das Menü schließen AWT, Swing, JavaFX & SWT 2
J SWING - Programm ohne Eclipse etc. starten AWT, Swing, JavaFX & SWT 7
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
M Programm in Jframe "einbinden" AWT, Swing, JavaFX & SWT 7
S Programm auf aktuellen Stand bringen AWT, Swing, JavaFX & SWT 2
Spin Tool: Popup -Programm AWT, Swing, JavaFX & SWT 3
GUI-Programmer Swing JWindow - Programm wird ohne Grund beendet AWT, Swing, JavaFX & SWT 3
E Kreis-Mal-Programm AWT, Swing, JavaFX & SWT 7
P Programm aktuallisiert sich nur beim Rüberzeigen AWT, Swing, JavaFX & SWT 6
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
C Programm für 5 sekunden anhalten und actionevent abfangen AWT, Swing, JavaFX & SWT 18
J Programm schließen AWT, Swing, JavaFX & SWT 4
J Programm nur einmal öffnen AWT, Swing, JavaFX & SWT 3
E Windows Kontext Menü - Laufendes Programm AWT, Swing, JavaFX & SWT 3
T Programm vom Desktop starten! AWT, Swing, JavaFX & SWT 2
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
M Browser in Programm einbinden AWT, Swing, JavaFX & SWT 4
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
H Userinput in GUI an externes Programm AWT, Swing, JavaFX & SWT 8
D Firefox aus Programm starten AWT, Swing, JavaFX & SWT 4
S LayoutManager Einfaches Programm mit VE und Eclipse3.6 realisieren AWT, Swing, JavaFX & SWT 2
J SWT 32 bit Programm für 64 bit Jave AWT, Swing, JavaFX & SWT 10
S AWT Fenster schließen und Programm beenden AWT, Swing, JavaFX & SWT 10
H Infofenster vor dem eigentlichen Java Programm AWT, Swing, JavaFX & SWT 3
B Uberschrift in Swing-Programm zur Laufzeit aendern... AWT, Swing, JavaFX & SWT 4
C Swing Kleines Programm mit SWING unter Verwendung von MVC AWT, Swing, JavaFX & SWT 5
capgeti Wie Programm in JPanel (o.ä.) starten? AWT, Swing, JavaFX & SWT 3
B Externes Programm mit Robot Steuern AWT, Swing, JavaFX & SWT 3
G Programm läuft nur auf manchen Rechnern AWT, Swing, JavaFX & SWT 10
M SWT Programm pausiert ungewollt AWT, Swing, JavaFX & SWT 5
K Website in Java Programm einbinden AWT, Swing, JavaFX & SWT 3
B komplettes programm in einem fenster AWT, Swing, JavaFX & SWT 5
L Frage bei Programm mit Zufallskreisen AWT, Swing, JavaFX & SWT 9
L Programm terminated (zu frueh) AWT, Swing, JavaFX & SWT 3
T SplashScreen im laufenden Programm AWT, Swing, JavaFX & SWT 2
M Panelinhalt im Programm verändern AWT, Swing, JavaFX & SWT 12
R Programm nicht mehr in der Taskleiste AWT, Swing, JavaFX & SWT 2
3TageBart Ebenen in Zeichen-Programm implementieren AWT, Swing, JavaFX & SWT 9
H Swing HUD in externes Programm einblenden AWT, Swing, JavaFX & SWT 7
R Japaner koennen mein Programm nicht nutzen..? AWT, Swing, JavaFX & SWT 11
J Programm benötigt letzten Feinschliff.... ;) AWT, Swing, JavaFX & SWT 14
L Fenster das Klicks an dahinterliegendes Programm übergibt? AWT, Swing, JavaFX & SWT 4
S Splash Screen / "Loading" Anzeige im Programm AWT, Swing, JavaFX & SWT 27
N RCP/SWT View durch Programm auf 2. Bildschirm verschieben AWT, Swing, JavaFX & SWT 2
T Programm in die Taskleiste AWT, Swing, JavaFX & SWT 3
I Swing - Problem mit ActionListener (Programm bleibt stehen) AWT, Swing, JavaFX & SWT 2
P DEFAULT_CLOSE_OPERATION bei folgendem Programm nicht einz. AWT, Swing, JavaFX & SWT 5
P SWT: KeyEvents abfangen, wenn Programm minimiert ist? AWT, Swing, JavaFX & SWT 5
D Schrift im Programm ändern? AWT, Swing, JavaFX & SWT 2
A Programm automatisch in den Vordergrund AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben