weiter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent el){
if(el.getSource()==weiter){
if(idsgesucht==false){
idsgesucht=true;
validate();
asslinee="";
final IDs neu = new IDs();
if(alle.getState()==true)
asslinee = "%";
if(alle.getState()==false)
asslinee = asslineeingabe.getText();
//Hier kommt Rechenintensive Operation (mm=)
mm=neu.getIDs(text.getText(), dateModel.getDate().toLocaleString(),dateModel1.getDate().toLocaleString(),asslinee);
id.clear();
for(int i=0;i<mm.getSize();i++){
id.addElement(mm.getElementAt(i).toString());
}
}else if(alleIdent.getState()==true&&idsgesucht==true){
id.clear();
for(int i=0;i<m.getSize();i++){
id.addElement(m.getElementAt(i).toString());
}
}else{
id.clear();
for(int i=0;i<t.length;i++){
id.addElement(t[i]);
}
}
idauswahl= new JList(id);
idauswahl.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
Runnable run = new Runnable(){
public void run(){
Montage_DB neu = new Montage_DB();
neu.insert(tabellenname.getText(), text.getText(), dateModel.getDate().toLocaleString(),dateModel.getDate().toLocaleString(), id);
}
};
Thread thread = new Thread(run);
thread.start();
}}});
Habe in diesem Button zwei rechenintensive Schritte. Einmal der Thread thread, welcher aber auf das Ergebnis von mm warten soll. Da dies etwas dauert, wollte ich dies in einen neuen Thread packen und eine Progressbar einbauen.
Dies funktioniert nicht, der das Programm in den zweiten Thread springt (ohne Ergebnis).
Wie stelle ich das am geschicktesten an, das Thread zwei wartet ?
es gibt beliebige andere Möglichkeiten, z.B. ne Schleife mit Thread.sleep(100) bis im anderen Thread ein bestimmtes Flag gesetzt ist
(was dort erst am Ende gesetzt wird)
bzw. direkt so lange in einer Schleife warten bis das Ergebnis != null ist
-----
oder doch darüber nachdenken, warum der Standard nicht geht,
was ist z.B. thread1? in deinem obigen Code nicht vorhanden
dass es wohl geht sieht man an
Code:
public class TestThread
extends Thread
{
private static int count = 1;
private int number;
private TestThread other;
public TestThread(TestThread other)
{
this.number = TestThread.count++;
this.other = other;
start();
}
public void run()
{
if (this.other != null)
{
p("wartet auf anderen Thread");
try
{
other.join();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
p("macht weiter, da anderer Thread tot");
}
p("wartet standardmäßig");
warte(3000);
p("ist gleich tot");
}
private void p(String st)
{
System.out.println(System.currentTimeMillis() + ", Thread " + number + " " + st);
}
private static void warte(int k)
{
try
{
Thread.sleep(k);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
throws Exception
{
TestThread a = new TestThread(null);
warte(1000);
new TestThread(a);
}
}
es gibt beliebige andere Möglichkeiten, z.B. ne Schleife mit Thread.sleep(100) bis im anderen Thread ein bestimmtes Flag gesetzt ist
(was dort erst am Ende gesetzt wird)