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);
}
From stackoverflow
-
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(); }
Aly : I want it to be executed outside of the EDT, on a new threadAmir Afghani : Look at my example, the work would not be executed on the EDT.Aly : Thanks I called t.run() instead which made it breakTom Hawtin - tackline : Why no `@Override` on `run`, or better why not use `Runnable`?Amir Afghani : I'm not here to spoon feed - both of those are great ideas. -
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();
-
Sorry, wrong thread.
0 comments:
Post a Comment