hallo liebe java-gemeinde!
leider habe ich ein thread-problem. ich möchte gerne einen thread über einen button starten und wieder beenden können. der status, ob der thread laufen oder beendet wird erfolgt über eine checkbox. hier mal ein wenig code:
hier der aufruf:
hier die thread-klasse:
leider klappt das nicht ganz. ich kann den thread starten und auch wieder beenden, aber wenn ich
dann NOCHMAL den thread starten will, ruft er nicht mehr die 'run()' auf. kann mir hier evtl. einer
weiterhelfen?
vielen dank,
leider habe ich ein thread-problem. ich möchte gerne einen thread über einen button starten und wieder beenden können. der status, ob der thread laufen oder beendet wird erfolgt über eine checkbox. hier mal ein wenig code:
hier der aufruf:
Code:
public void setThreadAutoLog(boolean run_) {
if (run_) {
try {
this.auto_delete_logging = C_AutoDeleteLogging.getInstance();
System.out.println("STARTEN");
auto_delete_logging.setInterrupted(false);
auto_delete_logging.start();
} catch (Exception ex) {
/*** Errorhandling ***********************************/
System.out.println("Error: setThreadAutoLog (Exception)");
cat.error("Error: setThreadAutoLog (Exception)");
}
} else {
System.out.println("BEENDEN");
auto_delete_logging.setInterrupted(true);
}
}
hier die thread-klasse:
Code:
public class C_AutoDeleteLogging extends Thread {
/*------------------------------------------------------------------*/
/* Initialisierung*/
/*------------------------------------------------------------------*/
/*Logging*/
Logger cat = (Logger) Logger.getLogger(this.getClass());
/*LogFile*/
private C_LogFile logFile = null;
/*Vergleichsgröße die sagt, ab wann das LogFile gelöscht werden soll*/
private long deleteSize = 0;
/*Wie lange soll der Thread inaktiv sein*/
private long time_to_sleep_in_millis = 1500;
/*Variable, um Thread zu unterbrechen*/
private boolean interrupted = false;
/*Instanz der eigenen Klasse --> SINGLETON-PATTERN*/
private static C_AutoDeleteLogging INSTANCE;
/*------------------------------------------------------------------*/
/* Konstruktoren*/
/*------------------------------------------------------------------*/
private C_AutoDeleteLogging() {
this.logFile = new C_LogFile(C_LogFileConstant.LOG_FILE_FILEPATH);
}
public static synchronized C_AutoDeleteLogging getInstance() {
if (INSTANCE == null) {
System.out.println("OBJECT gebildet");
INSTANCE = new C_AutoDeleteLogging();
} else {
System.out.println("Schon gestartet...")
}
return INSTANCE;
}
/*------------------------------------------------------------------*/
/* Methoden*/
/*------------------------------------------------------------------*/
...
/**
* Setzt das Interrupted-Flag, welches für eine Unterbrechung des Threads
* sorgt.
* @param interrupted_ Flag
*/
public void setInterrupted(boolean interrupted_) {
System.out.println("C_AutoDeleteLogging --> setInterrupted (" + interrupted_ + ")");
this.interrupted = interrupted_;
}
/**
* Gibt das Interrupt-Flag zurück. Hier kann geschaut werden,
* ob der Thread noch aktiv ist.
* @return deleteSize Die Vergleichsgröße
*/
public boolean isInterrupted() {
System.out.println("C_AutoDeleteLogging --> isInterrupted");
return interrupted;
}
/**
* Thread prüft ob das LogFile gelöscht werden darf.
*/
public void run() {
System.out.println("C_AutoDeleteLogging --> run");
while (!isInterrupted()) {
try {
/*Schlafen*/
this.sleep(time_to_sleep_in_millis);
} catch (InterruptedException ex) {
/*** Errorhandling ***********************************/
System.out.println("Error: Automatisches löschen des Log-File (InterruptedException)");
cat.error("Error: Automatisches löschen des Log-File (InterruptedException)");
//System.out.println("InterruptedException: " + ex.getMessage());
//System.out.println("InterruptedExceptionState: " + ex.toString());
//System.out.println("VendorError: " + ex.getLocalizedMessage());
setInterrupted(true);
}
try {
/*Überprüfen*/
System.out.println("Überprüfen");
if (deleteSize <= logFile.getSize_kB()) {
//System.out.println("Inhalt vom Log-File wird gelöscht!");
logFile.deleteContent();
}
} catch (Exception ex) {
/*** Errorhandling ***********************************/
System.out.println("Error: Automatisches löschen des Log-File (Exception)");
cat.error("Error: Automatisches löschen des Log-File (Exception)");
//System.out.println("Exception: " + ex.getMessage());
//System.out.println("ExceptionState: " + ex.toString());
//System.out.println("VendorError: " + ex.getLocalizedMessage());
setInterrupted(true);
}
}
}
}
leider klappt das nicht ganz. ich kann den thread starten und auch wieder beenden, aber wenn ich
dann NOCHMAL den thread starten will, ruft er nicht mehr die 'run()' auf. kann mir hier evtl. einer
weiterhelfen?
vielen dank,