Witam serdecznie,
Próbuję zaimplementować następującą rzecz:
Jest baza danych, jest sobie JTable, teraz przy wybraniu danego wiersza z tableki chcę zaciągnąć z bazy obrazek odpowiadający danemu wierszowi. Samo wczytywanie chcę natomiast odpalić w osobnym wątku. Wiec zrobiłem coś takiego:
table.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
public void valueChanged(ListSelectionEvent arg0) {
final int row = table.getSelectedRow();
synchronized (ClientView.this) {
if (table.getValueAt(row, getColumnWithObject()) != null) {
System.out.println("start");
threadPhoto.setRow(row);
if (!threadPhoto.isAlive())
threadPhoto.start();
else
threadPhoto.resume();
}
else
labelPhoto.setIcon(null);
}
}
Natomiast sama klasa Threada wygląda tak:
private class ThreadPhoto extends Thread {
private int row;
@SuppressWarnings("deprecation")
public void run() {
synchronized (mutex) {
while (true) {
labelPhoto.setIcon(((Client) table.getValueAt(row,
getColumnWithObject())).getPhoto());
System.out.println("koniec runa");
this.suspend();
}
}
}
/**
* Zwraca wartosc pola
* @return wartosc pola row.
*/
public int getRow() {
return row;
}
/**
* Ustawia wartosc pola
* @param row Nowa wartosc row do ustawienia.
*/
public void setRow(int row) {
this.row = row;
}
}
I zmienna:
private ThreadPhoto threadPhoto = new ThreadPhoto();
I Niby działa, ale jak szybko kursorem przejade w dół tabelki to przez te wątki nie zawsze zostanie wyświetlone poprawne zdjęcie. Czasami to które był wczesniej, czasami całkiem inne które było dużo wczesniej. Wiem dlaczego tak się dzieje, ale nie wiem jak to zrobić aby zachować kolejność wykonywania wątków...
Mam nadzieje ze jasno opisałem
Pozdrawiam i liczę na jakieś propozycję rozwiązania tego problemu ;)