Problem beim Thread

Status
Nicht offen für weitere Antworten.

pipoo

Mitglied
Hallo,

ich habe zwei threads methode geschrieben.

Der 1. Thread zeichnet Bild in einem Canvas. Also ist es quasi ein Loader.
Der 2. Thread ---> alle Daten werden in einem DB gesammelt.

In meinen codes werden 3 verschiedene Daten gesammelt. Für die 1 und 2. Daten funktioniert der 1. und 2. Thread wunderbar.

Aber wenn ich die 3, Daten sammeln will, ist der 1. Thread irgendwie abgestürzt. Falls der 2. Thread schon fertig ist, dann funktioniert der 1. Thread wieder.

kann jemand mir helfen, woran das problem liegt. und hoffe, ihr habt meine Beschreibung verstanden.

Pipoo
 
ich habe zwei threads methode geschrieben
was soll das heißen? zwei methoden in einer von Thread abgeleiteten Klasse, zwei verschiedene von Thread abgeleitete Klassen mit zwei verschiedenen methoden, zwei unterschiedliche threads die exakt dasselbe machen, oder wie? Konkreter bitte.
Der 1. Thread zeichnet Bild in einem Canvas. Also ist es quasi ein Loader.
"Loader" = ?
Der 2. Thread ---> alle Daten werden in einem DB gesammelt.
irgendwelche Daten die vom Programm errechnet werden, oder was für daten sind gemeint?

Aber wenn ich die 3, Daten sammeln will, ist der 1. Thread irgendwie abgestürzt.
Naja, mit einer ThreadSomehowFuckedUpException wird er das ja wohl nicht getan haben 😉. Gab's irgendwelche fehlermeldungen? Oder lief einfach nichts? Sah das nach einem Deadlock aus? Unter "irgendwie abgestürzt" kann man sich da echt alles mögliche und unmögliche vorstellen...

kann jemand mir helfen, woran das problem liegt. und hoffe, ihr habt meine Beschreibung verstanden.
Nicht so wirklich, ich jedenfalls nicht... :bahnhof:
Entweder wesentlich genauer sagen was Sache ist, oder code posten, oder (was ganz wunderbar wäre) ein kleines kompilierbares Beispiel mit dem selben Fehler posten.
 
was soll das heißen? zwei methoden in einer von Thread abgeleiteten Klasse, zwei verschiedene von Thread abgeleitete Klassen mit zwei verschiedenen methoden, zwei unterschiedliche threads die exakt dasselbe machen, oder wie? Konkreter bitte.
"Loader" = ?
irgendwelche Daten die vom Programm errechnet werden, oder was für daten sind gemeint?

Naja, mit einer ThreadSomehowFuckedUpException wird er das ja wohl nicht getan haben 😉. Gab's irgendwelche fehlermeldungen? Oder lief einfach nichts? Sah das nach einem Deadlock aus? Unter "irgendwie abgestürzt" kann man sich da echt alles mögliche und unmögliche vorstellen...

Nicht so wirklich, ich jedenfalls nicht... :bahnhof:
Entweder wesentlich genauer sagen was Sache ist, oder code posten, oder (was ganz wunderbar wäre) ein kleines kompilierbares Beispiel mit dem selben Fehler posten.


Vielen Dank, sorry für die nicht deutlichen Beschreibungen.

1. zwei verschiedene von Thread abgeleitete Klassen mit zwei verschiedenen methoden

2. jup, ein loader.

3. Die Daten werden von anderer Database gesammelt.

4. Es gibt keine Fehlermeldung. Loader wird nur angezeigt, wenn die daten aufgelistet werden. Das Bild sollte angezeigt werden, während die Daten gesammelt werden.

das code sieht so aus:
[HIGHLIGHT="Java"]
// Loader
LoadingBar LB = new LoadingBar();

new Thread() {

public void run() {
// hier werden die Daten gesammelt.
}
}.start();

[/HIGHLIGHT]


P.S. Es gibt keine Fehlermeldung. Nur wird das Loader angezeigt, falls die Daten schon fertig gesammelt werden.


Pipoo
 
Zuletzt bearbeitet:
Also unter "Loader" verstehst du jetzt einen Thread, der malerisch den Fortschritt der Bearbeitung aus der DB darstellt?
Es gibt keine Fehlermeldung. Loader wird nur angezeigt, wenn die daten aufgelistet werden. Das Bild sollte angezeigt werden, während die Daten gesammelt werden.
Klingt sehr stark nach einem typischen EDT-Problem. Veränder mal den Loader-Thread so:

[HIGHLIGHT="Java"]new Thread() {
public void run(){
SwingUtilities.invokeLater(new Runnable(){
public void run() {
// hier veränderst du die LoadingBar, oder malst rum oder sonst was
}
});
// hier holst du die Daten aus der DB
}
}.start();[/HIGHLIGHT]
 
Nicht ohne konkrete Beschreibung. Für mich hört es sich an, als blockierst du den UI Thread durch deine Datenbankgeschichte, aber das ist nur eine Vermutung.
 
Nicht ohne konkrete Beschreibung. Für mich hört es sich an, als blockierst du den UI Thread durch deine Datenbankgeschichte, aber das ist nur eine Vermutung.
So wie es da oben steht, werden die daten aber im separaten thread gesammelt, der vom gui-thread unabhängig läuft, egal wo er gestartet wird... Wie soll es denn den gui-thread blockieren, außer dass es durch run() statt start() gestartet wird, oder dass man im gui-thread per join() darauf wartet? Wo soll denn was wen blockieren? ???:L
 
Wie soll es denn den gui-thread blockieren, außer dass es durch run() statt start() gestartet wird, oder dass man im gui-thread per join() darauf wartet? Wo soll denn was wen blockieren? ???:L
Das waren so ziemlich genau die Optionen die mir auch eingefallen sind. Aber wie soll man die Beschreibung sonst lesen?
 
Das waren so ziemlich genau die Optionen die mir auch eingefallen sind. Aber wie soll man die Beschreibung sonst lesen?
keine Ahnung. Aber zumindest an dieser Syntaktisch inkorrekter code-skizze:
[highlight="Java"]
// Loader
LoadingBar LB = new LoadingBar();

new Thread() {

public void run() {
// hier werden die Daten gesammelt.
}
}.start();

[/highlight]
konnte ich weder das erste noch das zweite Problem feststellen...

Also, entweder liefert der OP ein bisschen code, oder wir kommen hier nicht weiter...:autsch:
 
So versuche ich meine Problem zu beschreiben.

In meinem Programm gibt es zwei verschiedenen Arten, die Daten aus anderer DB zu sammeln.
Für die 1. Art funktioniert das Loader wunderbar. Das Code sieht so aus:

// Thread - Loader
LoadingBar LB = new LoadingBar();
LB.threadStart();

Thread employeeUpdate = new Thread() {
public void run() {
// DB 1 zu greifen und die Daten werden gesammelt.
}
};

employeeUpdate.start();


Für die 2.Art funktioniert das Loader nicht. Das Loader wird nur angezeigt, wenn die Daten schon gesammelt wurden. Das Code sieht so aus:

Thread threadGetSupervisor = new Thread()
public void run() {
// DB 2 wird zugegriffen. und die Daten werden gesammelt.
// Falls die Daten nicht vorhanden sind, wird die DB 3 zugegriffen.
}
}
threadGetSupervisor.start();

Also die beiden DB sind Lotus Notes - DB. Die Laufzeit von 1. Art ist geringer als die 2. Art.
Ich hoffe, meine Beschreibungen sinf jetzt etwas klarer als vorher.

Vielen Dank

Pipoo
 
Zuletzt bearbeitet:
Und der 2. Fall wird durch die GUI getriggert?
Dann ist es kein Wunder. Wenn du join machst, blockiert die GUI so lange bis das notify kommt. Dann hättest du dir den Thread auch sparen können.
 
Nicht wenn du nicht an anderer Stelle auf den Thread wartest.
Debugger oder debug ausgaben auf die Konsole können wunder bewirken...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben