Hi Jeff,
Your changes make sense. Alternately, you could make TextEditor implement
Runnable, have fileChooser get instantiated in the run() method, and invoke
it from the constructor with the SwingUtilities.invokeLater method -- this
would constrain the creation to a single thread, which if I understand your
message correctly would prevent the deadlock issue.
-Curtis
On Sat, Jan 24, 2009 at 9:20 AM, Jeff McWhirter <jeffmc@xxxxxxxxxxxxxxxx>wrote:
>
> Hi,
> If you never access or subclass visad.util.TextEditor then please ignore
> this message.
>
> We have come across a deadlock problem in the IDV running on windows
> under jdk1.6.
> This problem is caused by creating JFileChooser objects in multiple
> threads.
>
> I'd like to change the fileChooser member of visad.util.TextEditor from
> protected to private so that this member
> does not get created at object instantiation time but rather gets
> created when needed. I have also
> modified visad.python.JPythonEditor because it would directly access
> that member.
>
> Is this going to break anyone's code?
>
> Thanks,
> Jeff
>
>
> The proposed changes:
> In TextEditor add:
>
> /** Create and initialize the the file chooser */
> protected JFileChooser doMakeFileChooser() {
> JFileChooser tmpChooser = new
> JFileChooser(System.getProperty("user.dir"));
> tmpChooser.addChoosableFileFilter(
> new ExtensionFileFilter("txt", "Text files"));
> return tmpChooser;
> }
>
>
> /** Create if needed and return the file chooser */
> protected JFileChooser getFileChooser() {
> if(fileChooser == null) {
> fileChooser = doMakeFileChooser();
> }
> return fileChooser;
> }
>
>
> Any access to fileChooser in these classes is changed to getFileChooser()
>
> In visad.python.JPythonEditor overwrite the doMakeFileChooser to add the
> file filter:
> /** Create and initialize the the file chooser */
> protected JFileChooser doMakeFileChooser() {
> JFileChooser tmpFileChooser = super.doMakeFileChooser();
> // add JPython files to file chooser dialog box
> tmpFileChooser.addChoosableFileFilter(
> new ExtensionFileFilter("py", "JPython source code"));
> return tmpFileChooser;
> }
>
>
>
>
> _______________________________________________
> visad mailing list
> visad@xxxxxxxxxxxxxxxx
> For list information, to unsubscribe, visit:
> http://www.unidata.ucar.edu/mailing_lists/
>