Please consider the following code:
public class MyClass extends javax.swing.JFrame {
private JTree jTree;
//Code ommited for clarity
public void methodCalledByAnotherThread(){
final DefaultTreeModel t = new DefaultTreeModel();
//Do some thing with t
SwingUtilities.invokeLater(new Runnable(){
public void Run(){
jTree.setModel(t);
}
});
}
}
MyClass is created and executed on the Swing thread. Some time during its execution it starts a second thread which will eventually call the methodCalledByAnotherThread(). Not this method will NEVER be called on the Swing thread.
methodCalledByAnotherThread() creates a (local) DefaultTreeModel object and does some work with it but because this is NOT on the Swing thread it cannot set the model into jTree hence the call to SwingUtilities.invokeLater(). In the Runnable object , which is executed on the Swing thread, it sets the LOCAL DefaultTreeModel t into the JTree.
My question is (and I haven't actually compiled and run this code yet so it may not work).. is the above BAD programming practice? If so how can I set a TreeModel created on a NON-Swing thread into a Swing object?