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?

<code = java>
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