Frage von SiggiSigmann, 43

Warum funktioniert der Thread nur wenn ich ein Thread.sleep(); oder ein System.out.println(); hinzufüge?

Hey ich habe ein Programm(Java) geschrieben indem in einem extra Thread 4 Buttons überprüft werden und wenn diese aktiviert werden ein Sound abgespielt werden soll. Allerdings funktioniert dies nicht wie gewünscht.

        public void run() {
            while(true){
                if(button[0].getAktive()){
                    while(button[0].getAktive()){
                        soundA();
                    }
                }else if(button[1].getAktive()){
                    while(button[1].getAktive()){
                        soundB();
                    }
                }else if(button[2].getAktive()){
                    while(button[2].getAktive()){
                        soundC();
                    }
                }else if(button[3].getAktive()){
                    while(button[3].getAktive()){
                        soundD();
                    }
                }
            }
        }   

Wenn ich nun ein System.out.println(); hinzufüge funktioniert es auf ominöse weise.

public void run() {
    while(true){
    System.out.println("run");
        if(button[0].getAktive()){
            while(button[0].getAktive()){
                soundA();
            }
        }else if(button[1].getAktive()){
            while(button[1].getAktive()){
                soundB();
            }
        }else if(button[2].getAktive()){
            while(button[2].getAktive()){
                soundC();
            }
        }else if(button[3].getAktive()){
            while(button[3].getAktive()){
                soundD();
            }
        }
    }
}       

Warum ist das so und wie kann ich den Thread ohne System.out.println(); zum laufen bekommen. Vielen Dank.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von KnusperPudding, Community-Experte für Java, 27

Zunächst fehlt eine Menge an Code den du nicht gepostet hast, somit sind nur Vermutungen möglich:

Dadurch dass der Thread ohne Unterbrechung und Pause alle Buttons prüft. wäre es möglich, dass durch den Thread auf das Aktiv-Attribut eine Sperre verhängt wird. - Aber das ist nur Theorie. 

Wenn du auf Button-Click einen Ton abspielen willst, wäre es sinnvoller das über einen Actionlistener zu gestalten. 

Kommentar von SiggiSigmann ,

Der "Button" ist kein normaler JButton sondern eine von mir Programmierte Klasse. Da ich einen gebogenen Button wollte und mit JButton ist mir nicht bekannt das das geht. Aber ansonnten hätte ich auch ein AktionListener Verwendet.

Kommentar von KnusperPudding ,

Nagut. Kein Problem. Dann poste bitte deine eigene Button-Klasse.

Kommentar von JCK2000 ,

wenn es deine eigene Klasse ist kannst du doch noch einfacher einen Listener einbauen und dann aufrufen!!!!!

Antwort
von spriday, 30

Du kannst nicht einfach mit Kontrollstrukturen auf einen Knopfdruck prüfen; dafür musst du schon Listener programmieren.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten