Thread (Prozess) zerstören

mchashi

Mitglied
Hallo Leute,

habe nun schon viel über Threads gelesen und mich mit diesen auseinandergesetzt.
Wenn ich mein Programm starte und es schließe, bleibt mein Thread weiterhin bestehen und der Prozess geht nicht aus dem TaskManager weg...

Hier mal meine kleine Klasse:
Code:
import javax.swing.*;
import java.awt.Toolkit;
import java.awt.event.*;

public class StoppUhr extends JFrame implements Runnable
{
	private Thread thread = null;
	private JButton stopJButton = null;
	private boolean myBreak = false;
	
	public StoppUhr() {
		super();
		System.out.println("Class: StoppUhr | void StoppUhr()");
		
		getContentPane().setLayout(null);

		initComponents();
		initGUI();
		
		setVisible(true);
	}
	
  	public static void main(String[] args) {
  		System.out.println("Class: StoppUhr | void main(String[] args)");
  		new StoppUhr();
	}
  	
  	public void run()
	{
		System.out.println("Class: StoppUhr | void run()");
		
		while (!myBreak)
		{	
			try {
				//mach was
			}
			catch (Exception e) {};
		}
	}
  	
  	public void initComponents() {
  		System.out.println("Class: StoppUhr | void initComponents()");
  		
		setBounds(0, 0, 123, 92);
		setTitle("StopIt");
	}
	
	private void initGUI() {
		System.out.println("Class: StoppUhr | void initGUI()");
		
		stopJButton = new JButton();
		stopJButton.setBounds(60, 37, 45, 20);
		stopJButton.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent e) {    
				stopJButtonActionPerformed();
			}
		});
		getContentPane().add(stopJButton);
	}
	
	public void stopJButtonActionPerformed() {
		System.out.println("Class: StoppUhr | void stopJButtonActionPerformed()");
		
		myBreak = true;
	}
}

Wie kann ich den Thread komplett abschalten... ?

Danke schon mal.

Gruß

Sven.
 
Hi, als erstes wenn du den Thread stopppen willst musst du ihn erstmal starten ;)

Code:
        public void initComponents() {
                System.out.println("Class: StoppUhr | void initComponents()");
                thread = new Thread(this);
                thread.start();
                setBounds(0, 0, 123, 92);
                setTitle("StopIt");
        }

Zweitens war dein Ansatz schon korrekt, dein Hauptproblem ist aber das nicht der Thread nicht
beendet wird sondern das der JFrame nur gehidet wird wenn du die Anwendung schliesst.
Ausweg:

Code:
        private void initGUI() {
                System.out.println("Class: StoppUhr | void initGUI()");
                addWindowListener(
                        new WindowAdapter(){
                                public void windowClosing(WindowEvent e){
                                        myBreak = true;
                                        System.exit(0);
                        }
                });
                stopJButton = new JButton();
                stopJButton.setBounds(60, 37, 45, 20);
                stopJButton.addActionListener(new ActionListener() { 
                        public void actionPerformed(ActionEvent e) {    
                                stopJButtonActionPerformed();
                        }
                });

                addWindowListener(new WindowClosingAdapter());

                getContentPane().add(stopJButton);
        }

Gruß

RedWing
 
gut, teste es mal.

sorry, aber nur einen Ausschnitt meiner Klasse gepostet und dabei die start()-Methode vergessen.
Code:
private void playJButtonActionPerformed() {
	System.out.println("Class: StoppUhr | void startJButtonActionPerformed()");

	thread = new Thread(this);
	thread.start();

	myBreak = false;
	stop = false;

	playJButton.setVisible(false);
	breakJButton.setVisible(true);
}

Danke schon mal.
 
Zurück