event und while-schleife

teslar

Aktives Mitglied
hallo,
ich habe im moment ein programm, wo ich eine while schleife benutze.
is jetz nix besonderes, aber ich möchte, das das programm weiterhin auf einen Knopf reagiert,
welchen ich erstellt habe.
also, ist das möglich?
 

Marco13

Top Contributor
Ich mit einer do-Schleife.

Vielleicht auch mit einer if-Schleife.

:joke:


Die while-Schleife muss von einem eigenen Thread ausgeführt werden. Vermutlich hast du im Moment sowas wie
Code:
public void actionPerformed(ActionEvent e)
{
    lasseWhileSchleifeLaufen();
}
Das muss sowas werden wie
Code:
public void actionPerformed(ActionEvent e)
{
    Thread thread = new Thread(new Runnable()
    {
        public void run()
        {
            lasseWhileSchleifeLaufen();
        }
    });
    thread.start();
}
Aber da kann es Schwierigkeiten geben, wenn man nicht weiß, was man da tut. Grober erster Einstieg, nicht ganz passend aber auch nicht ganz falsch: Threads and Swing
 

RySa

Bekanntes Mitglied
Ich glaube er meint eher dass er irgendwo im Programm eine Schleife durchläuft und fragt ob der Listener immer noch auf knopfdruck reagiert während dieser schleife. Hab ich Dich richtig verstanden ?

Also wenn du irgendwo sowas hast:
Java:
int i = 0;
while(i < 100000){
//irgendwas hier
i++;
}
Und du auf ein knopf drückst, während diese Schleife noch in der ausführung ist, dann wird der Listener drauf hören, der Event-Dispatcher wird das Event allerdings erst weitergeben, wenn die Schleife durchgelaufen ist (das gleiche passiert wenn du z.B repaint() in einer schleife aufrufst. Dafür brauchst du je nach dem was du realisieren willst, eigene Threads :)
 

teslar

Aktives Mitglied
hi
danke erstmal
Ich glaube er meint eher dass er irgendwo im Programm eine Schleife durchläuft und fragt ob der Listener immer noch auf knopfdruck reagiert während dieser schleife. Hab ich Dich richtig verstanden ?

Also wenn du irgendwo sowas hast:
Java Code: Quelltext in neuem Fenster öffnen

1
2
3
4
5



int i = 0;
while(i < 100000){
//irgendwas hier
i++;
}

Und du auf ein knopf drückst, während diese Schleife noch in der ausführung ist, dann wird der Listener drauf hören, der Event-Dispatcher wird das Event allerdings erst weitergeben, wenn die Schleife durchgelaufen ist (das gleiche passiert wenn du z.B repaint() in einer schleife aufrufst. Dafür brauchst du je nach dem was du realisieren willst, eigene Threads
is das was ich meinte``
dann muss ich nur noch wissen, wie das mit den threads geht, aber das krieg ich schon noch raus

danke trotydem an alle
 
T

Tomate_Salat

Gast
>joke> ich denke er wei- nicht, wie man das kezboard/lazout umstellt. Daf[r musst du in Windows einfach ALT]UMSCHALTEN dr[cken und dein normales lazout ist wieder hergestellt. Wobei es echt schon schickt, mit dem falschen lazout yu schreiben )D.
 

teslar

Aktives Mitglied
also nochmal ums kurz zu machen,
es ist so, das das programm in der while schleife daten von einem server abfragen soll, die er dann direkt wiedergibt.(das, was in der schleife steht, haben wir bereits)
und nebenbei sollen halt noch anfragen an den server geschickt werden.

ist dann dieser swingworker oder nen thread besser, kenn den kram noch garnet^^


edit: wofür steht:"(ActionEvent e)"
 
Zuletzt bearbeitet:

RySa

Bekanntes Mitglied
ActionEvent ist ein Event des Interfaces ActionListener(hört auf z.B button clicks). In der actionPerformed Methode, kannst du über den ActionEvent abfragen, welcher button gedrückt wurde usw.

Und zu deinem Thema. Wenn du gleichzeitig abfangen, verarbeiten, und anfragen schicken willst, dann musst du es in verschiedenen Threads machen, sonnst können die aufgaben nur nacheinander ausgeführt werden, und nicht parallel, wie du es haben möchtest.

Dazu kommt noch, dass wenn du erst etwas schicken willst, das der andere Thread zuerst verarbeiten muss, dann muss du die Threads zusätzlich synchronisieren. Stichwort (synchronized-Methods/Threads).
 
T

Tomate_Salat

Gast
Ich nehme mal an, du hast noch nicht viel mit GUI und wahrscheinlich garnichts mit Threads gearbeitet. Also nimm lieber den SwingWorker.In den haste dich wesentlich schneller eingearbeitet, als in Multithreading.
 

teslar

Aktives Mitglied
Java:
            class MyProgram implements Runnable {
          public void run() throws java.io.IOException
          {
            while(true)
            {
                if(clt.is()==false)
                {
                    hatZeilenbereich1.haengeAn(clt.anfrage_read_only());
      
                }
            }
          }
        }
       
        Thread t;
        MyProgram myProg = new MyProgram();
        t = new Thread (myProg);
so hab ioch es bis jetzt.
ich schau mal ob es mit swingworker besser geht, aber bis jetz hab ichnur noch das problem,
das ich nicht thrown kann in verbindung mit dem runnable, hat da einer von euch ne lösung?
 
T

Tomate_Salat

Gast
a) try-catch
b) Verwende den SwingWorker. Wenn du das so löst, rennt dein Thread ewig (+ nicht mal als Dämon-Thread) und dein Programm wird wahrscheinlich mind. einen prozessorkern zu 100% auslasten. Schau dir Tutorials zum SwingWorker an. Der ist einfacher.

c) Vllt solltest du auch erstmal wieder zurück zu den Konsolenanwendungen und Grundlagen lernen, mir scheint so, als ob du da nachholbedarf hast.

@Landei:
das wird doch nicht etwa hochdeutsch sein, oder :D
 

teslar

Aktives Mitglied
hat den der swing worker die selben vorzüge wie threads,
also das mehrere saschen gleichzeitig ausgeführt werden

2. ich beende den thread später mit dem stop befehl. hab gehört, der soll nich so gut sein, aber weis es nich besser


edit:gibt es irgentwo nen gutes tutorial, wenn möglich auf deutsch, in dem der swingworker erklärt wird, kapier den link von weiter oben nich ganz

edit2: einige grundlagen kenn ich wirklich net, so wie try catch, hab von gehört^^
 
Zuletzt bearbeitet:
G

Gast2

Gast
hat den der swing worker die selben vorzüge wie threads,
also das mehrere saschen gleichzeitig ausgeführt werden
Ja, der SwingWorker verwendet intern auch Threads.

2. ich beende den thread später mit dem stop befehl. hab gehört, der soll nich so gut sein, aber weis es nich besser
Threads lässt man auslaufen, d.h. die run() Methode beenden.

edit:gibt es irgentwo nen gutes tutorial, wenn möglich auf deutsch, in dem der swingworker erklärt wird, kapier den link von weiter oben nich ganz
SwingWorker Tutorial
Erster google hit, weiß nicht ob das was taugt.

edit2: einige grundlagen kenn ich wirklich net, so wie try catch, hab von gehört^^
Java ist auch eine Insel – 7 Exceptions
 

teslar

Aktives Mitglied
ok danke an alle,
meine letzte frage noch;
wie macht man nen(wenn des funtzt) nen boolean als event;
also wenn xy==true ist, soll er nen void starten
 

Landei

Top Contributor
Sowas?
[c]if(xy){ starteMich(); }[/c]

Du solltest wirklich an deiner Ausdrucksweise arbeiten, man darf bei jeder Frage raten, was gemeint ist. Lass dir nicht alles aus der Nase ziehen. Oder bringe ein Stückchen Code mit einem Kommentar an der Stelle, wo du nicht weiter weißt.
 

teslar

Aktives Mitglied
also erstmal sry;
es gibt ja events, wenn zum beispiel ein button gedrückt wird.
ich möchte ein event erstellen, das auf einen boolean reagiert
 

Landei

Top Contributor
Für Knöpfe geht das ungefähr so (aus'm Kopp - ohne Gewähr)

Java:
class Foo {

   private boolean raketenScharfGeschaltet = false;


   ...
   //da wo du deinen Button definierst:
   button.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae) {
             if(raketenScharfGeschaltet) {
                  raketenStart();
             }
        }
   });


   private void raketenStart() {
       //WHOOOOOSH!
   }
}

Es ist aber oft besser, den Button einfach solange zu deaktivieren, wie die Aktion nicht erlaubt ist - dann sieht nämlich der Anwender, dass es momentan nicht geht. Der Befehl dazu ist [c]button.setEnabled(false);[/c] - und natürlich [c]button.setEnabled(true);[/c] zum Wieder-Scharf-Schalten.

[Edit]

Aber wenn ich dich richtig verstehe, willst du ein Event auslösen, wenn sich ein boolean ändert (und nicht ein Button gedrückt wird)? Das ist ziemlich ungewöhnlich. Wenn du einen Setter hast, kannst du das natürlich dort tun:

Java:
class Foo{
    private boolean bar = false;
  
    public setBar(boolean b) {
       bar = b;
       barWurdeGeändert();
    } 

    public void barWurdeGeändert(){
      //tu was
    }
}

Man könnte auch das boolean ganz objekt-orientiert in eine eigene Klasse kapseln, und PropertyChangeListenerSupport dranhängen, wenn du wirklich "echte" Listener mit an- und abmelden brauchst. Aber ich denke immer noch, dass es eine bessere Lösung gibt, wenn du damit rausrückst, was du eigentlich machen willst.
 
Zuletzt bearbeitet:

teslar

Aktives Mitglied
ich möchte eine art chat(als teil eines spiels) programmieren.
es geht im moment darum, dass das Programm die ankommenden chatnachrichten sofort ausgibt.
bisher bekommt man nur die nachrichten angezeigt, wenn man selber etwas schreibt.
Java:
    public SuMAnwendung()  throws java.io.IOException
    {
        /**   Initialisierung der Oberklasse
         */
            super(811, 672);
     /** Fenster schließen
         */
            hatBildschirm.addWindowListener(new WindowAdapter()
            {
                public void windowClosing(WindowEvent we)
                {
                    System.exit(0);
                }
            })
        ;
            /** Eingine
             */
                clt = new client("5.150.150.211",9513);

        /**   position
         */
            ........
        /**   Spielbereich
         */
            ......

            

            
        /**   items
         */
            .......
            
        /**   Ausrichtung 
         */
            .......


            while(true)
            {
                if(clt.is()==false)//nachricht an client vorhanden?
                {
                    hatZeilenbereich1.haengeAn(clt.anfrage_read_only());
      
                }
            }
         
     }
     
     public  void Enter() throws java.net.UnknownHostException, java.io.IOException, java.lang.InterruptedException
    {
        String x = hatTextfeld1.inhaltAlsText();
        if(a==0)
        {
             if (x.startsWith("/ip")==true)
            {
                String b =x.substring(5);
                clt.ipchange(b);
            }else
            {
                clt.anfrage_start(x);
                a++;
            }

        }
        else if (a==1)
        {
            if (x.equalsIgnoreCase("/stop")==true)
            {
                clt.anfrage_stop();
                a--;
                beenden();
            }
            else
            {
                String Zipp =clt.anfrage_get(x);
                hatZeilenbereich1.haengeAn(Zipp);
            }

        }
    }
    public void Aus()throws java.io.IOException
    {
        if (a==1)
        {
                clt.anfrage_stop();
            
        }
        beenden();
    }

also;
ich habe jetzt das rausgenommen, wo nur die buttons usw erzeugt werden.
mir fehlt halt eine dauerschleife, die im hintergrund läuft oder ein event, dass, wenn clt.is()==true ist, die vorhandenen nachrichten abfragt

wie man sich denken kann funktioniert die while-schleife nicht
 
Zuletzt bearbeitet:

Landei

Top Contributor
Na ja, im Prinzip(!) brauchst du nur deine while-Schleife in einen eigenen Thread zu packen, das wäre eine Lösungsmöglichkeit.

Java:
new Thread(new Runnable(){
   public void run(){
        while(true) {
            if... 
            Thread.sleep(100); //10x in der Sekude sollte reichen
        }
   }
}).start();

Das Problem ist natürlich, dass du verhindern musst, dass sich zwei Nachrichten im Fenster überlappen. "synchronized" ist hier das Zauberwort. Insgesamt ist die Sache recht diffizil, z.B. ist auch Swing nicht threadsicher.

Ob es eine Möglichkeit mit einer Art Listener gibt, hängt ganz von deiner Architektur ab. Vielleicht solltest du überlegen, auf sowas wie JGN aufzusetzen (ich kenne mich nicht näher damit aus, aber ich sehe im SourceCode Sachen wie [c]ChatMessage[/c]).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Houly while Schleife im ActionPerformed Event Java Basics - Anfänger-Themen 8
Fiedelbambu fxml onAction event Java Basics - Anfänger-Themen 7
T FXMl Event has not a Slot Java Basics - Anfänger-Themen 1
E Methoden Action Event wird nicht vollständig ausgeführt Java Basics - Anfänger-Themen 3
Tommy135 Event erstellen Java Basics - Anfänger-Themen 7
CptK Methoden Event bei gedrückter Maustaste immer wieder ausführen Java Basics - Anfänger-Themen 1
CptK Klassen Event bei gedrückter Maus immer wieder mit Pause ausführen Java Basics - Anfänger-Themen 2
topi WindowAdapter / Listener / Event Java Basics - Anfänger-Themen 4
L Event schmeißen Java Basics - Anfänger-Themen 1
F In Eclipse Haltepunkt bei Event setzen? Java Basics - Anfänger-Themen 1
T Übungsaufgabe Event Handling Java Basics - Anfänger-Themen 0
M Action Event auf Textfield legen Java Basics - Anfänger-Themen 18
V Button/Event wird nicht ausgeführt, was tun? Java Basics - Anfänger-Themen 2
J Keyboard Event auch ohne Fokus mitbekommen Java Basics - Anfänger-Themen 2
D Java Eclipse cannot be cast to java.awt.event.ItemListener Java Basics - Anfänger-Themen 3
IngoF Welches Event kommt wann? Java Basics - Anfänger-Themen 8
A Key Event - Abfrage von 2 gedrückten Tasten Java Basics - Anfänger-Themen 6
E Event gesucht Java Basics - Anfänger-Themen 1
G Button Event Java Basics - Anfänger-Themen 6
Thallius Hidden Feature über Key Event starten Java Basics - Anfänger-Themen 4
A Labels Inner JButton Event Erstellbar? Java Basics - Anfänger-Themen 3
F Erste Schritte Aktuelles Fenster durch Event schließen Java Basics - Anfänger-Themen 3
D Button action Event einblenden/ausblenden Java Basics - Anfänger-Themen 6
U Threadsafe Event-Handling Java Basics - Anfänger-Themen 2
C Klassen NullPointerException beim Event Handling in GUI Java Basics - Anfänger-Themen 8
P ActionListener Action Event Java Basics - Anfänger-Themen 5
J Erste Schritte import awt.* ;awt.event.*; Java Basics - Anfänger-Themen 3
L Null Pointer Exception bei Focus Event bei einem JTextField Java Basics - Anfänger-Themen 2
M Während event einen anderen event ausführen?? Java Basics - Anfänger-Themen 3
S Event aus anderer Klasse als Auslöser Java Basics - Anfänger-Themen 5
M Event erstellen Java Basics - Anfänger-Themen 6
B OOP Eigener Event-Listener erstellen Java Basics - Anfänger-Themen 4
D Eigenes Event beim TimeOut Java Basics - Anfänger-Themen 2
D Auf Event warten Java Basics - Anfänger-Themen 4
I AWS Event Notification Service Sample ausführen... Java Basics - Anfänger-Themen 7
M JList Event Java Basics - Anfänger-Themen 5
R eigenen Event schreiben Java Basics - Anfänger-Themen 16
S Kein Event bei Click auf JComboBox Java Basics - Anfänger-Themen 4
N paint methode statt Event-Handling-Methode Java Basics - Anfänger-Themen 3
Q Eigenes Event feuern Java Basics - Anfänger-Themen 5
H2SO3- dreieck, bild --> maus klick event. Wie gehts? Java Basics - Anfänger-Themen 10
R Event in eigener Klasse implementieren ? Java Basics - Anfänger-Themen 8
B Applet: Event-Handling-Methode in start- bzw. paint-Methode Java Basics - Anfänger-Themen 7
D Window resize Event ? Java Basics - Anfänger-Themen 5
D Bei Event soll Instanz sich selbst löschen Java Basics - Anfänger-Themen 4
D Event mit n-Button8s) von einem Panel Java Basics - Anfänger-Themen 9
GilbertGrape Eigenes Event? Java Basics - Anfänger-Themen 2
A Synchronisierung oder gibt es das onChange event? Java Basics - Anfänger-Themen 4
J Automatisch Button drücken/Event ausführen? Java Basics - Anfänger-Themen 6
G Button Action Event starten Java Basics - Anfänger-Themen 4
G Methode nicht im Event-Dispatcher-Thread starten? Java Basics - Anfänger-Themen 2
F Doppelklick-Event auf JTree Java Basics - Anfänger-Themen 5
A Wo/Wie Event Listener Java Basics - Anfänger-Themen 3
N Event auf JTabbedPane abfragen ? Java Basics - Anfänger-Themen 8
G Event Handler Java Basics - Anfänger-Themen 7
T button event Java Basics - Anfänger-Themen 3
P Raw-Key-Event Java Basics - Anfänger-Themen 4
Q ActionListener event bei JPanels Java Basics - Anfänger-Themen 5
J Event-Handling geht nicht Java Basics - Anfänger-Themen 6
G Button event problem Java Basics - Anfänger-Themen 24
B Eigenes Event schreiben Java Basics - Anfänger-Themen 7
D MouseLister und Identifikation des Event - Buttons Java Basics - Anfänger-Themen 4
G start-oder paint-Methode anstatt Event-Handling-Methode? Java Basics - Anfänger-Themen 3
T java.awt.event.WindowAdapter Java Basics - Anfänger-Themen 2
B Event-Actionlistener(Def) Java Basics - Anfänger-Themen 6
G GUI Event Handling Java Basics - Anfänger-Themen 5
M Event auslösen (unsinnig gestellt - ignorieren) Java Basics - Anfänger-Themen 4
M [SOLVED]Swing Event Management Java Basics - Anfänger-Themen 7
N Runtime.exec und Key event Java Basics - Anfänger-Themen 2
C Klasse muss auf Event in einer anderen Klasse reagieren Java Basics - Anfänger-Themen 7
G JTable - Event - MVC Java Basics - Anfänger-Themen 10
J Event-Hilfe Java Basics - Anfänger-Themen 4
T Event zu bestimmter Uhrzeit auslösen ? Java Basics - Anfänger-Themen 5
S MausKlickZähler - Event Problem Java Basics - Anfänger-Themen 2
M Kommunikation zwischen GUI und Event -Klasse Java Basics - Anfänger-Themen 3
C mouseDown (Event e, int x, int y) rechts oder linksklick ? Java Basics - Anfänger-Themen 10
D if (event.target instanceof TextField) Java Basics - Anfänger-Themen 2
M While-Schleife mit Wartezeit Java Basics - Anfänger-Themen 15
Ranger229 Endless loop in while Schleife Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
Ostkreuz While Schleife neustarten Java Basics - Anfänger-Themen 20
S Erste Schritte do-while Schleife Münzwurf Java Basics - Anfänger-Themen 1
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
P Best Practice While loop schleife Java Basics - Anfänger-Themen 5
S Erste Schritte While Schleifen Java Basics - Anfänger-Themen 11
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
R do while Schleife Verständnisfrage Java Basics - Anfänger-Themen 2
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
Say do-while Syntak Java Basics - Anfänger-Themen 3
A Return in While Schleife Java Basics - Anfänger-Themen 6
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
J do..while Schleife Java Basics - Anfänger-Themen 14
W Wiederkehrende Konsolen-Anzeige mit do-While?! Java Basics - Anfänger-Themen 33
X Enum Abfrage ohne if, for, while oder switch Java Basics - Anfänger-Themen 21
java-starter Erste Schritte Mit While Schleifen Programme schreiben Java Basics - Anfänger-Themen 4
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
B Zuweisungen und Methodenaufrufe in Bedingung der while Schleife? Java Basics - Anfänger-Themen 2
JavaBeginner22 Würfeln bis 6 while Schleife Java Basics - Anfänger-Themen 13
G while.next() Verständnisfrage Java Basics - Anfänger-Themen 16

Ähnliche Java Themen

Neue Themen


Oben