Methode zum anhalten(oder pausieren) eines Programms gesucht



  • ich suche eine funktion die mein Programm (Applet) für kurze zeit anhält.
    Ich brauche sie bei folgendem: Ich habe den Türme-von-Hanoi-algorithmus implementiert(rekursiv). Ich will jetzt nach jedem Zug die Türme anzeigen(habe das auch schon implementiert), nur leider sieht man nichts von dem ablauf, da der code zu schnell abläuft. Man sieht immer nur den Endzustand. Welche Methode kann(oder sollte) ich zum pausieren da nutzen?



  • Ich machs immer über Thread.sleep()

    MfG SideWinder


  • Mod

    Es kann übrigens auch mit einem entsprechenden Thread.sleep(...) zu Situationen kommen, bei denen du nur den Endzustand siehst. In dem Fall hättest du bei deinem Programm grundsätzlich etwas falsch gemacht. Zeig den Code mal, wenn das so ist.



  • Ich hab es mit Thread.sleep ausprobiert, hat leider trotzdem nur den Endzustand ausgegeben Hier die Codeausschnitte die zeichnen, die Klasse ist so Geschrieben, das PlayHanoi nicht unbedingt ein applet sein muss(ich weiß das mit der this übergabe ist nicht sehr schön..)sondern auch mit JOptionpane und System.out.println() ausgeben kann.(Das Programm ist noch nicht fertig, ich werde da noch einiges ändern, aber die Grundmethoden sollten funktionieren).

    //PlayHanoi.java
    import javax.swing.*;
    import java.awt.*;
    public class PlayHanoi extends JApplet{
    	private HanoiTowers game;
    	private int anz=3;
    	public void init(){
    		game=new HanoiTowers(anz);
    		repaint();
    		try{
    			game.play(anz,0,2,1,2,this);
    		}catch(InterruptedException e){}
    	}
    	public void paint(Graphics g){
    		game.paintApplet(g,0,0);
    	}
    }
    //HanoiTowers.java
    import javax.swing.JOptionPane;
    import java.awt.*;
    class HanoiTowers{
    	Tower [] t =new Tower[3];
    	HanoiTowers(int n){
    		t[0]=new Tower(n,true);
    		t[1]=new Tower(n);
    		t[2]=new Tower(n);
    	}
    		public void paintApplet(Graphics g,int x,int y){
    		int offset;
    		offset = t[0].paintTower(g,x,y);
    		t[1].paintTower(g,x+=offset,y);
    		t[2].paintTower(g,x+=offset,y);
    	}
    	public void play(int n,int from,int to,int over,int outputType,PlayHanoi inst) throws InterruptedException{
    		if(n>0){
    			play(n-1,from,over,to,outputType,inst);
    			if(!move(from,to)) System.out.println("Move nicht durchgeführt");
    			switch(outputType){
    			case 0:
    				print(false);//JOptionpane-ausgabe
    				break;
    			case 1:
    				print(true);//SystemOut-ausgabe
    				break;
    			case 2:
    				Thread.sleep(500);
    				inst.repaint();
    				break;
    			}
    			play(n-1,over,to,from,outputType,inst);
    		}
    	}
    
    }
    //Tower.java
    import java.awt.*;
    class Tower {
    	private int []levels;
    	private int length;
    		public int paintTower(Graphics g,int x,int y){
    		for(int i=0;i<length;i++){
    			if(levels[i]!=0){
    				g.drawOval(x+(100/length*(i+1)),y+((length-i)*50),100/length*levels[i]*2,50);//Scheiben mit max. 100 pixel länge
    			}
    			else g.drawString("keine Scheibe;"+x+";"+y+"",x+(100/length*(i+1)),y+((length-i)*50));//Nur zu Testzwecken
    		}
    		return 200;//liefert die Breite eines Turmes, vlt. später flexibel
    	}
    }
    

    habe den überflüssigen code(wie move und die print)weggelassen
    mit system.out und JOptionpane hat das Programm funktioniert.



  • habs gelöst:
    für die Nachwelt (besser gesagt für die die das selbe problem haben):
    Habe es folgendermaßen selbst gelöst:
    class PlayHanoi implementiert Runnable
    privates objekt Thread erstellt und Konstruktor aufgerufen Thread(this);
    game.play in der methode run aufgerufen
    im paint sleep aufgerufen.


Anmelden zum Antworten