views:

161

answers:

3

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);
}
+1  A: 

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

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();
Smalltown2000
A: 

Sorry, wrong thread.

Toiski