Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

waldinator

Praktikant

  • "waldinator" started this thread

Posts: 11

Date of registration: Nov 24th 2009

1

Thursday, December 16th 2010, 1:25am

Programmierpraktikum - Java Quartett

Hallo allerseits,
ich hab ein kleines Problem mit Java und GUI :D
ist leider nicht so leicht zu schildern, ich probiere es aber mal...

undzwar will ich (grob gesagt) auf einen Button klicken, etwas anzeigen lassen(z.B. ein label umbenennen), kurz warten und darauf etwas anderes anzeigen lassen (z.B. ein anderes label umbenennen).
dabei ist die Verzögerung dazwischen das Problem.

ich habs schon mit wait(500) und mit Thread.sleep(500) probiert...

Thread.sleep(500) sollte ja einfach eine halbe sekunde dazwischen warten. allerdings klicke ich auf den button er wartet eine halbe sekunde und zeigt dann beides an :/
-> meine schlussfolgerung: er wartet in der actionPerformed Methode (oder wie auch immer) diese halbe Sekunde, kann aber das erste Label nicht umbennen, weil er noch nicht zur gui zurückgekehrt ist, und dannach zeigt er beides an. ..blöd :/

wait(500) sollte theoretisch nach der halben Sekunde aufwachen und den prozess fortfahren, tut es aber leider nicht.
Also es passiert folgendes: ich drücke auf den Button und das erste Label wird benannt, das andere aber nicht mehr. Außerdem hängt der Button komisch fest, also bleibt mit Mouseover dauerhaft gedrückt...
Ich hab gelesen, man muss den irgendwie aufwecken mit notify() oder notifyAll() aber kA wie das geht. Sollte theoretisch aber auch von alleine wieder aufwachen wegen der eingetragenen Zeit.

hat jemand eine Idee wie ich das umsetzen kann? ohne der verzögerung kann man ja keine coolen animationen machen :D


ich hoffe ich hab es verständlich geschildert

grüße

pythong

Trainee

  • "pythong" is male

Posts: 112

Date of registration: Oct 23rd 2005

Location: Ehemals Preußisches Gebiet

Occupation: Ehemals Studentenquäler. I'm finally done with school!

2

Thursday, December 16th 2010, 1:46am

versuch mal nen Timer zu nutzen. nicht den java.util, sondern den javax.swing

vllt hilft dir das hier weiter http://download.oracle.com/javase/tutori…misc/timer.html
(mit beispiel für tooltips, die nach ner zeit aufleuchten und dann wieder verschwinden)
don't ask me, google it

Oelkstul

random classifier

  • "Oelkstul" is male

Posts: 60

Date of registration: Oct 9th 2007

3

Thursday, December 16th 2010, 3:44am

deine beschreibung des verhaltens von Thread.sleep() hört sich so an, als hättest du dies einfach in der methode des eventhandlers aufgerufen ohne deinen code in einem neuen thread laufen zu lassen.
somit hast du den event dispatch thread warten lassen und diene oberfläche ist eingefroren, anschliessend wurden alle änderungen der gui verarbeitet.
einfacher fix wäre sich nen speraten thread im eventhandler um das sleep herum zu basteln ^^

This post has been edited 1 times, last edit by "Oelkstul" (Dec 16th 2010, 3:46am)


Posts: 14

Date of registration: Oct 9th 2009

4

Thursday, December 16th 2010, 8:29am

Der Ansatz, hier mit verschiedenen Threads zu arbeiten, ist schon ganz richtig. Das Thema kommt im Programmierpraktikum allerdings erst demnächst ;) Bis dahin kannst du dich natürlich im Insel-Buch (Kapitel 14) informieren.

Alternativ kannst du die Pause auch "manuell" umsetzen - dafür war der "Weiter"-Button in der GUI vorgesehen. Wenn der Spieler die Karte des Computergegners nach dessen Zug angesehen hat, kann er durch diesen Button das Spiel fortsetzen.

waldinator

Praktikant

  • "waldinator" started this thread

Posts: 11

Date of registration: Nov 24th 2009

5

Friday, December 17th 2010, 3:23am

Danke für die schnellen Antworten :) ich hab es jetzt wirklich einfach mit dem "Weiter"-Button umgesetzt.
Mich würde aber auch mal interessieren, wie man einen Button automatisch klicken lassen kann, um z.B. zu Testzwecken Spieler 1 automatisch spielen zu lassen. Hat jemand da eine Idee?
Dafür hab ich schon versucht den actionListener einfach aufzurufen. Leider wusste ich nicht, was ich als event angeben soll.

AlexL

Junior Schreiberling

  • "AlexL" is male

Posts: 222

Date of registration: Feb 10th 2008

Location: Walsrode

Occupation: Master Informatik

6

Wednesday, December 22nd 2010, 5:00am

das kommt drauf an wozu das das event später benutzen willst... wenn du es gar nicht benutzt könntest du einfach null übergeben bzw such dir hier http://download.oracle.com/javase/6/docs…ctionEvent.html nen passenden Konstruktor raus.
zum gui testen gibt es die java.awt.Robot class, habe es allerdings nie (zum testen) benutzt, musst du mal schauen obs was für dich ist.

Gruß, Alex
//edit: ups merke das schon älter... naja vielleicht hilfts dennoch :)

This post has been edited 1 times, last edit by "AlexL" (Dec 22nd 2010, 5:00am)


Justus

Junior Schreiberling

  • "Justus" is male

Posts: 152

Date of registration: Oct 16th 2004

Occupation: ich will auch mal Käptain sein!

7

Friday, December 24th 2010, 10:42am

Danke für die schnellen Antworten :) ich hab es jetzt wirklich einfach mit dem "Weiter"-Button umgesetzt.
Mich würde aber auch mal interessieren, wie man einen Button automatisch klicken lassen kann, um z.B. zu Testzwecken Spieler 1 automatisch spielen zu lassen. Hat jemand da eine Idee?
Dafür hab ich schon versucht den actionListener einfach aufzurufen. Leider wusste ich nicht, was ich als event angeben soll.



Gab es da nicht eine Methode button.click() ?