hallo liebe javafreunde,
wie immer sind mir threads nocht nicht so ganz klar ;(
also ich habe einen laufenden thread, welcher gewisse sachen ausführt und objekte erstellt (zb. systemTrays und ein JWindow...)
wenn dieser thread nun einen fehler wirft (exception) dann stirbt er (isAlive == false).
Was nun komisch ist, dass wenn der thread tot ist, dann ist das systemTray und das JWindow immer noch sichtbar und mir ist nicht gelungen dies zu verhindern... mit system.exit(..) ist alles tot, das möchte ich auch nicht, sondern, das der tote thread einfach verschwindet^^ thread.destroy() ist veraltet und funktioniert sowieso nicht... thread.dumpStack geht auch nicht... hab auch das einzige objekt (jBox) (was systemTray und JWindow beinhaltet) auf null gesetzt...und nichts...
also bitte ich auch um hilfe, danke
der zu sterbende thread:
dies ist ein listener aus dem hauptthread, der gestartet wird, wenn eine configDatei geladen ist...
grüße
head
wie immer sind mir threads nocht nicht so ganz klar ;(
also ich habe einen laufenden thread, welcher gewisse sachen ausführt und objekte erstellt (zb. systemTrays und ein JWindow...)
wenn dieser thread nun einen fehler wirft (exception) dann stirbt er (isAlive == false).
Was nun komisch ist, dass wenn der thread tot ist, dann ist das systemTray und das JWindow immer noch sichtbar und mir ist nicht gelungen dies zu verhindern... mit system.exit(..) ist alles tot, das möchte ich auch nicht, sondern, das der tote thread einfach verschwindet^^ thread.destroy() ist veraltet und funktioniert sowieso nicht... thread.dumpStack geht auch nicht... hab auch das einzige objekt (jBox) (was systemTray und JWindow beinhaltet) auf null gesetzt...und nichts...
also bitte ich auch um hilfe, danke
der zu sterbende thread:
Java:
class JboxThread extends Thread {
private List<ActionListener> liseners;
private JBoxController jBox;
public JboxThread(JBoxController jBox) {
this.jBox = jBox;
}
public void addActionListener(ActionListener l) {
if (liseners == null)
liseners = new LinkedList<ActionListener>();
liseners.add(l);
}
@Override
public void run() {
try {
jBox.init();
System.out.println("updating...");
while (jBox.syncClient()) {
System.out.println("update successful");
Thread.sleep(5000);
System.out.println("updating...");
}
System.out.println("update wasn't successful");
// starting thread again, afer loading config
ConfigController
.addActionListener(new StartingThreadListener());
} catch (Exception e) {
e.printStackTrace();
// startig thread again
fireDeadThreadEvent();
}
jBox = null;
liseners = null;
System.out.println("Exiting thread");
}
private void fireDeadThreadEvent() {
if (liseners != null)
for (ActionListener l : liseners)
l.actionPerformed(new ActionEvent(this, 0, "Thread died"));
}
}
dies ist ein listener aus dem hauptthread, der gestartet wird, wenn eine configDatei geladen ist...
Java:
private class StartingThreadListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
ConfigController.removeActionListener(this);
final JboxThread thread = new JboxThread(jBox);
thread.addActionListener(new StartingThreadListener());
thread.start();
new Thread() {
@Override
public void run() {
while (true)
if (thread.isAlive()) {
System.out.println("alive");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
System.out.println("thread died");
break;
}
}
}.start();
}
}
grüße
head
Zuletzt bearbeitet: