I have a method running on the EDT and within that I want to make it execute something on a new (non EDT) thread. My current code is follows:
@Override
public void actionPerformed(ActionEvent arg0) {
//gathering parameters from GUI
//below code I want to run in new Thread and then kill this thread/(close the JFrame)
new GameInitializer(userName, player, Constants.BLIND_STRUCTURE_FILES.get(blindStructure), handState);
}
You can use SwingWorker
to undertake a task on a worker thread off the EDT.
E.g.
class BackgroundTask extends SwingWorker<String, Object> {
@Override
public String doInBackground() {
return someTimeConsumingMethod();
}
@Override
protected void done() {
System.out.println("Done");
}
}
Then wherever you call it:
(new BackgroundTask()).execute();
You can create and start a new Java Thread that executes your method from within the EDT thread :
@Override
public void actionPerformed(ActionEvent arg0) {
Thread t = new Thread("my non EDT thread") {
public void run() {
//my work
new GameInitializer(userName, player, Constants.BLIND_STRUCTURE_FILES.get(blindStructure), handState);
}
};
t.start();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With