wywołanie metody po repaint()

0

Uprzejmie proszę forumowiczów o wytłumaczenie mi dlaczego jeżeli wywołuję metodę "przyciskStart" po repaint to repaint nie przemalowuje tylko uruchamia się wywołana metoda "przyciskStart", a jeżeli nie wywołuję metody "przyciskStart" to repaint działa poprawnie?

import java.awt.Button; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.util.*; public class Przyklad extends java.applet.Applet { Image obrazek1; Button przycisk; boolean ps = false; boolean pol = false; String [] tab = {"obraz1.jpg", "obraz2.jpg", "obraz3.jpg", "obraz4.jpg", "obraz5.jpg", "obraz6.jpg"}; public void init () { setBackground(new Color(153, 255, 255)); obrazek1 = getImage(getCodeBase(), "poczatek.jpg"); warstwa(); } public void paint(Graphics g) { g.drawImage(obrazek1, 40, 20, this); } public void warstwa() { przycisk = new java.awt.Button(); setLayout(null); addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { klikMyszy(evt); } } ); przycisk.setFont(new java.awt.Font ("Dialog", 1, 14)); przycisk.setLabel("START"); przycisk.setLocation(20,350); przycisk.setSize(160,50); przycisk.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { przyciskStart(evt);} } ); add(przycisk); } public void klikMyszy(java.awt.event.MouseEvent evt) { if(evt.getX()>40&&evt.getX()<440 && evt.getY()>20&&evt.getY()<320){//współrzędne na obrazku pol=true; pole();} else{ pol=false; pole(); } } public void przyciskStart(java.awt.event.ActionEvent evt) { if(ps == true){ try{Thread.sleep(2000);} catch (InterruptedException exc){}//usypianie wątku } Random los = new Random(); int liczba1 = los.nextInt(tab.length); obrazek1 = getImage(getCodeBase(), tab[liczba1]); repaint(); } public void pole() { if(pol==true){ obrazek1 = getImage(getCodeBase(), "wynik1.jpg"); ps = true; repaint(); // przyciskStart(null); } else{ obrazek1 = getImage(getCodeBase(), "wynik2.jpg"); ps = true; repaint(); //przyciskStart(null); } } } ```
0

problem rozwiązany
zamiast sleep poradzono mi użyć klasy Timer i TimerTask. Prawdopodobnie komponent zajęty był usypianiem wątku i nie obsługiwał repaint.
wywaliłem sleep z przyciskStart, i dodalem w metodzie pole za repaint

opoznienie.schedule(new TimerTask() {
public void run() {
przyciskStart(null);
}
}, 2000);//opoznienie zadania

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0