Monday, February 21, 2011

Make process run on non EDT (event dispatch thread) thread from EDT

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 thread
    Amir Afghani : Look at my example, the work would not be executed on the EDT.
    Aly : Thanks I called t.run() instead which made it break
    Tom 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