# Überprüfen ob eine Methode ausgeführt wurde



## ownedbyme2009 (2. Jul 2012)

Hallo Leute,

ich wollte wissen ob man mit einer einfachen if Überprüfung überprüfen kann ob eine Methode ausgeführt wurde. 
Ich möchte das mein swing Thread auf hört zu laufen wenn ich die methode exit von meinem Frame ausführe. Btw. In dem if befehl soll dann drin stehen timer.stop da dank dem timer der swing thread weiter läuft.

Fals code für diese frage benötigt wird kann ich welchen posten.


----------



## pl4gu33 (2. Jul 2012)

bau dann doch in der Exit Methode einen Befehl ein, der den Timer stopp bzw. eine "Weiterleitung" die das veranlasst


----------



## ownedbyme2009 (2. Jul 2012)

ist dann nicht das problem das ich in der methode exit nicht das objekt auswählen kann? Also timer, somit kann ich dann den auch nicht stoppen oder?


----------



## bygones (2. Jul 2012)

wuerd ich ueber eine Listener struktur machen oder eine andere Form der Benachrichtigung (variable zb). D.h. derjenige der ausfuehrt sendet die Nachricht an den Timer, nicht der Timer fraegt ab ob etwas passiert ist.


----------



## pl4gu33 (2. Jul 2012)

wenn du willst poste mal ein bisschen Code dann könnte man dass vll. besser erklären


----------



## ownedbyme2009 (2. Jul 2012)

Mein swing Thread in dem der timer aktivirt wird.


```
Thread worker = new Thread() {
				public void run() {
					
					javax.swing.Timer t = new javax.swing.Timer( 1, new ActionListener() {
						  public void actionPerformed( ActionEvent e ) {

					SwingUtilities.invokeLater(new Runnable() {
						
						
						public void run() {
							System.out.println("Der Swing Thread läuft noch");
							if(frame.getName().equals(a.getBesucherliste())) {
							}
							
							else {
								frame.setName(a.getBesucherliste());
								endLabel.setText(frame.getName());
								frame.validate();
								frame.update(frame.getGraphics());
							
						
								
						};

					}
					}
					
				);
					
			};
					});		
					t.start();

					
}
```

und hier meine Klasse frame mit einem ansatz zur lösung des Problems


```
import java.awt.Cursor;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;



import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.KeyStroke;



public class Frame extends JFrame {



	
	private boolean aus;
	private String name;

	
	public Frame() {
		
		setSize(Toolkit.getDefaultToolkit().getScreenSize());
		setUndecorated(true);
		
		
		Cursor c = getToolkit().createCustomCursor(
				new ImageIcon("").getImage(), new Point(0, 0), "Cursor");
		setCursor(c);
		exit();
	}
		
		public void exit() {
		AbstractAction action = new AbstractAction() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				dispose();
				setAus(true);
			}
		};

		getRootPane().registerKeyboardAction(action,
				KeyStroke.getKeyStroke((char) KeyEvent.VK_ESCAPE, 0),
				JComponent.WHEN_IN_FOCUSED_WINDOW);
	}
	
	public void setName(String qname) {
		name = qname;
	}
	
	public String getName() {
		return name;
	}

	public boolean getAus() {
		return aus;
	}

	public void setAus(boolean aus) {
		this.aus = aus;
	}

	

}
```

edit vieleicht ein wenig unsauber programmiert


----------



## pl4gu33 (2. Jul 2012)

wo genau erzeugst du denn den Thread bzw. den Frame? 

weil du könntest dem Frame im Konstruktor ein Objekt des Threads mitgeben und dann dort Canceln wenn Exited.


----------



## ownedbyme2009 (2. Jul 2012)

Ich erzeuge Thread Frame und alles andere in einer klasse namens Controller

hier der ganze code der Klasse (mit lösungs ansatz)

```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JLabel;
import javax.swing.SwingUtilities;


	public class Controler  {
		
		private static Parser parser;
		private static Frame frame;
		private static Praesentation p;
		private static JLabel endLabel;
		private static  Mythread a;
		
		public static void main(String[] args) throws Exception {
			parser = new Parser();
			frame = new Frame();
			p = new Praesentation();
			endLabel = new JLabel();
			a = new Mythread();
			
			
			frame.setName(parser.getNamen());
			frame.getContentPane().add(endLabel);
			endLabel.setText(frame.getName());
			frame.validate();
			frame.update(frame.getGraphics());
			p.vollbild(frame);
			
			Thread worker = new Thread() {
				public void run() {
					
					javax.swing.Timer t = new javax.swing.Timer( 1, new ActionListener() {
						  public void actionPerformed( ActionEvent e ) {

					SwingUtilities.invokeLater(new Runnable() {
						
						
						public void run() {
//							System.out.println("Der Swing Thread läuft noch");
							if(frame.getName().equals(a.getBesucherliste())) {
							}
							
							else {
								frame.setName(a.getBesucherliste());
								endLabel.setText(frame.getName());
								frame.validate();
								frame.update(frame.getGraphics());
							
						
								
						};

					}
					}
					
				);
					
			};
					});		
					t.start();
					if(frame.getAus() == true){
						System.out.println(frame.getAus());
					}
					
}
			};
			a.start();
			worker.start();
		}
	}
```


----------



## pl4gu33 (2. Jul 2012)

okay das mit dem ganzen Static sieht komisch aus aber okay ... zu deinem Problem 

du könntest dir im Frame ein Attribut erzeugen z.b.  private Thread timer; 
nach dem du in der Main den Worker erzeugt hast setzt du per SetMethode im Frame diesen auf das Attribut und zack schon hast du in deinem Frame den Timer den du dort benutzen kannst

oder halt den ganzen Thread auslagern in eine eigene Klasse und dann dem Frame übergeben


----------



## ownedbyme2009 (2. Jul 2012)

habe es jetzt leicher gelöst

Im frame die variable aus = fals gesetzt und im Thread eine while schleife eingebaut solange aus = false ist läuft sie. Ich glaube der Code ist selbst erklärend

Frame

```
public void exit() {
		AbstractAction action = new AbstractAction() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				dispose();
				setAus(true);
			}
		};
```

Thread nur das was ich geändert habe

```
t.start();
					while(frame.getAus() == false){
					if(frame.getAus() == true){
						t.stop();
					}
					}
```


----------



## Crian (2. Jul 2012)

Dann bau aber wenigstens noch ein schlafen ein, das ist sonst eine ziemlich belastende Schleife.

und läuft



bygones hat gesagt.:


> derjenige der ausfuehrt sendet die Nachricht an den Timer, nicht der Timer fraegt ab ob etwas passiert ist.



genau zuwider


----------

