Wie erzwinge ich sofortigen repaint?

Status
Nicht offen für weitere Antworten.

philo

Aktives Mitglied
Hallo,

ich schreibe gerade eine Art Hörtest, der so ablaufen soll:


zu sehen:

weiterButton:

-> bei klick

zu sehen:

nichts - nur hören ---

-> nach ende des Sounds:

zu sehen:

antwort.buttons

-> bei klick

wieder von vorne (nur weiterbutton).

mein code ist vereinfacht dargestellt so:
Code:
public void actionPerformed(ActionEvent actEvt) {
                     if (e.getSource() == weiterbutton) {
			weiterbutton.setVisible(false);
                                                repaint(0);
                                                // hier ist das problem
                                                Player.playNextFile();
                                                while(Player.isRunning()) {}
                                                showAntwortButtons;
	    }
                    else{
                        antwortAuswerten(actEvt);
                        hideAnswerButtons();
                        weiterbutton.setVisible(true);
                        }      
				
}

die problemstelle ist markiert. irgendwie hört man den Sound schon wenn der weiterButton noch sichbar ist, dass soll nicht so sein.

Wie bekomme ich das hin?

Danke und gruss

philo
 
B

Beni

Gast
Der Thread, der für das Zeichnen verantwortlich ist, ist derselbe Thread, der die actionPerformed-Methode aufgerufen hat. :arrow: solange du in der Methode sitzt, ist gar nichts mit Zeichnen (bzw. im Fall des Buttons mit Nicht-zeichnen).

Du musst das mit Multithreading lösen, ich weiss nicht, was all deine Methoden machen, und kann deshalb schlecht eine fertige Lösung anbieten, aber grundsätzlich wird es etwa so sein: Button geklickt -> im "actionPerformed" ein Thread mit dem Ton starten -> Falls ein Button gedrückt wurde den Thread unterbrechen, oder wenn der Thread ausläuft die Antwort anzeigen lassen.

Hier ist was über Threads: Kapitel 9
 

philo

Aktives Mitglied
Hi,

danke für die Antwort. Ich verstehe nicht, warum ich da threads nehmen sollte. Player.spielt die Datei als Thread ab, deshalb warte ich mit der leeren while-schleife. auf den thread bzw. das Ende des Sounds. Erst jetzt sollen die Antwortmöglichkeiten geziegt werden.

Mein Problem ist die Stelle, wo ich den weiterKnopf unsichtbar machen will. Die Datei soll erst gespielt werden, wenn das Fenster neu gezeichnet wurde (leerer Bildschirm), also das Fenster sich mit dem nichtsichtbaren Button gezeichnet hat.

Kurze Frage nebenbei:

ist das eigentlich "die richtige Art" ständig wechselnde Frames zu zeigen? Ich benutzen das SpringLayout.
Wo ist die Performance besser? remove(Component) oder setVisible(false)? bestimmt letzteres, da alles beim alten bleibt, oder?
 
R

Roar

Gast
nein Beni meint was anderes. dein repaint(0) bewirkt gar nix, weil erst die actionPerformed methode abgearbeitet werden muss bevor du wieder neuzeichnen kannst ( btw: sowas macht man nicht mit repaint() sondern mit revalidate() ).

zur frage nebenbei: benutz doch einfach das CardLayout, dazu ist das gut. und ich glaub kaum dass es bei deinem programm auf die paar milli oder nanosekunden ankommt die setVisible(false) schnelelr oder langsamer ist als ein element aus einem array zu löschen.
 
B

Beni

Gast
deshalb warte ich mit der leeren while-schleife.
Jaaaa... eben, das ist der Fehler. Du musst aus der Methode actionPerformed raus, weil du sonst das ganze Progi blockierst.

Jeder Thread kann ja nur immer ein Kommando nach dem anderen abarbeiten. Wenn derjenige Thread der für die Darstellung zuständig ist in einer while-Schlaufe sitzt, kann er nicht zeichnen. Das ist wie ein Auto das immer im Kreis fährt, aber unbedingt an eine bestimmte Addresse soll: es kommt nie dort an.
 

philo

Aktives Mitglied
ich brauche also den thread um mein Fenster neu zu zeichnen, da alles was ich in actionPerformed mache zu einem thread gehört.

werde es mal versuchen, danke.

revalidate() ? ich versuche es mal.

da gibt es ja tausen methoden von denem man denken koennte sie mache das gleiche. z.B. update, repaint, validate...


gruss und danke

philo
 
B

Beni

Gast
Also ein Startpunkt kann ich dir noch geben:

Code:
Thread thread = null;

public void actionPerformed(ActionEvent actEvt) {
  if (e.getSource() == weiterbutton) {
    weiterbutton.setVisible(false);
    repaint();

    // Thread herstellen und starten
    thread = new Thread(){
      public void run(){
        Player.playNextFile();
        while(Player.isRunning()) {}
          showAntwortButtons;

          if( isInterrupted() )
            // den Player stoppen

        }
      }
    }.start();
  }
  else{
    thread.interrupt();  // hmm, ich glaub jedenfalls, dass die Methode so hies.
    antwortAuswerten(actEvt);
    hideAnswerButtons();
    weiterbutton.setVisible(true);
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Repaint Funktioniert nicht AWT, Swing, JavaFX & SWT 2
D JUNG Repaint function does not work AWT, Swing, JavaFX & SWT 2
E repaint Probleme AWT, Swing, JavaFX & SWT 13
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
L Swing repaint() ruft paintComponent(g1d) nicht auf AWT, Swing, JavaFX & SWT 12
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
I Swing Verhindern, dass repaint() kaskadiert AWT, Swing, JavaFX & SWT 6
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
K Methode repaint() AWT, Swing, JavaFX & SWT 1
B Swing Wann brauche ich repaint() ? AWT, Swing, JavaFX & SWT 1
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
A repaint(); AWT, Swing, JavaFX & SWT 9
J Swing ungewünschter Nebeneffekt bei der repaint() Methode AWT, Swing, JavaFX & SWT 3
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
S 2D-Grafik repaint()-Aufruf. Und nichts geschieht. AWT, Swing, JavaFX & SWT 5
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
P JPanel und Repaint AWT, Swing, JavaFX & SWT 5
J JavaFX Automatisches Neuzeichnen ("Repaint") abstellen. AWT, Swing, JavaFX & SWT 10
F JTable Repaint Issue AWT, Swing, JavaFX & SWT 1
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
C Repaint() funktioniert nicht in TabbedPanel AWT, Swing, JavaFX & SWT 5
S JList repaint AWT, Swing, JavaFX & SWT 1
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
M Repaint mittels Button richtig aufrufen klappt nicht AWT, Swing, JavaFX & SWT 1
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D repaint() klappt anders als vorgestellt AWT, Swing, JavaFX & SWT 15
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
B Swing Repaint Problem - mal wieder AWT, Swing, JavaFX & SWT 5
P 2D-Grafik Gezielter Repaint einzelner Frames in Java-Game AWT, Swing, JavaFX & SWT 6
javampir Bei repaint nix los AWT, Swing, JavaFX & SWT 2
B Swing repaint() AWT, Swing, JavaFX & SWT 3
Ernesto95 AnimationLoop - Problem bei Aufruf von repaint AWT, Swing, JavaFX & SWT 6
P 2D-Grafik repaint(); steigender RAM Verbauch AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
S Applet Repaint AWT, Swing, JavaFX & SWT 3
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
R Swing Grafikfehler bei repaint AWT, Swing, JavaFX & SWT 2
N repaint() blockieren AWT, Swing, JavaFX & SWT 6
K canvas zeig nach repaint nichts an AWT, Swing, JavaFX & SWT 8
M Repaint() AWT, Swing, JavaFX & SWT 14
J Swing repaint, repaint, repaint AWT, Swing, JavaFX & SWT 8
M Applet repaint() verlangsamen AWT, Swing, JavaFX & SWT 7
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
P EDT Problem? Kein Aufruf der repaint Methode AWT, Swing, JavaFX & SWT 6
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
kodela Problem mit repaint() AWT, Swing, JavaFX & SWT 3
N Swing Funktion repaint() updated nicht AWT, Swing, JavaFX & SWT 5
F repaint reagiert nicht AWT, Swing, JavaFX & SWT 8
S AWT Probleme mit repaint() AWT, Swing, JavaFX & SWT 2
D Repaint()? Oder was??? AWT, Swing, JavaFX & SWT 5
M Eine nicht korrekte Darstellung bei repaint() warum? AWT, Swing, JavaFX & SWT 4
T 2D-Grafik Kreis "von Hand" zeichnen -> jedesmal repaint()? AWT, Swing, JavaFX & SWT 6
R validate(), repaint funktionieren nicht! AWT, Swing, JavaFX & SWT 7
B AWT Canvas überdeckt nach repaint() JComboBox-Optionen AWT, Swing, JavaFX & SWT 2
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
S validate(), invalidate(), repaint(),... Was kommt wann? AWT, Swing, JavaFX & SWT 5
M 2D-Grafik repaint() löscht altes Bild nicht AWT, Swing, JavaFX & SWT 2
J repaint() nicht richtig? AWT, Swing, JavaFX & SWT 6
R repaint erzwingen AWT, Swing, JavaFX & SWT 3
Zettelkasten repaint() von anderen Klassen aufrufen AWT, Swing, JavaFX & SWT 4
H repaint()-Problem - 50% CPU-Auslastung AWT, Swing, JavaFX & SWT 4
P repaint während Thread läuft AWT, Swing, JavaFX & SWT 9
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
N Swing MainWindow(JFrame) aktualisieren(neuzeichnen) repaint AWT, Swing, JavaFX & SWT 4
T repaint() Problem AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Repaint - Alternative? AWT, Swing, JavaFX & SWT 3
C JLabel, JTextArea, JScrollPane. repaint(); ? AWT, Swing, JavaFX & SWT 6
N Swing repaint() funktioniert nicht AWT, Swing, JavaFX & SWT 5
T Swing repaint funktioniert nur manchmal? AWT, Swing, JavaFX & SWT 6
K Jpanel repaint problem (Fullscreen) AWT, Swing, JavaFX & SWT 5
V Swing Bei repaint() tut sich nichts AWT, Swing, JavaFX & SWT 7
G ColorReader, bei Fadenkreuz zeichnen mit repaint() flackern AWT, Swing, JavaFX & SWT 19
I Canvas Repaint Probleme AWT, Swing, JavaFX & SWT 2
D Swing Actionlistener verhindert repaint?! AWT, Swing, JavaFX & SWT 2
S JLabel repaint AWT, Swing, JavaFX & SWT 8
C Swing Linux mag mein Swing-repaint() nicht... AWT, Swing, JavaFX & SWT 7
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
Luk10 repaint() auch in anderen Klassen! AWT, Swing, JavaFX & SWT 6
A repaint() zu langsam, bitte um alternativen AWT, Swing, JavaFX & SWT 5
T Überlappende Transparenz und repaint() AWT, Swing, JavaFX & SWT 10
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
O Girdbag Formatierung nach repaint verloren AWT, Swing, JavaFX & SWT 2
E Swing - repaint() AWT, Swing, JavaFX & SWT 6
T Image wird nicht angezeigt?! - MediaTracker/repaint AWT, Swing, JavaFX & SWT 9
E AWT Problem mit Repaint (in Loop oder Timer) AWT, Swing, JavaFX & SWT 3
O Exception bei repaint AWT, Swing, JavaFX & SWT 3
D Fragen zu Swing, paintComponent() und repaint AWT, Swing, JavaFX & SWT 6
Dit_ Zeilenmarkierung verschwindet nach repaint() AWT, Swing, JavaFX & SWT 12
A Swing Infinite repaint loop unterbrechen AWT, Swing, JavaFX & SWT 7
hdi Swing EDT macht kein repaint() AWT, Swing, JavaFX & SWT 2
F "Verrutschen" von Komponenten bei repaint() AWT, Swing, JavaFX & SWT 9
Junker Fensterinhalt vor ausführen von repaint komplett löschen. AWT, Swing, JavaFX & SWT 2
T Fenster wird trotz repaint() und revalidate() nicht sofort neu gezeichnet AWT, Swing, JavaFX & SWT 6
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
J Swing Verständnis-Problem repaint(int x,int y,int width,int height) AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben