Hi Jmol Users,

I recently went back to a project I abandoned in 2006 and would like to take advantage of some of the new features that have been implemented in Jmol since then. However, when I embed the latest version into my Swing application, I can't get it to display PDB files. Instead, Jmol throws the following exception:
FileManager opening C:/Documents and Settings/Chris/Desktop/1CDH.pdb
Exception in thread "QueueThread0" java.lang.NullPointerException
    at org.jmol.viewer.Viewer.getModelCount(Unknown Source)
    at org.jmol.viewer.Eval.load(Unknown Source)
    at org.jmol.viewer.Eval.instructionDispatchLoop(Unknown Source)
    at org.jmol.viewer.Eval.runEval(Unknown Source)
    at org.jmol.viewer.Viewer.evalStringWaitStatus(Unknown Source)
    at org.jmol.viewer.ScriptManager$ScriptQueueRunnable.runScript(Unknown Source)
    at org.jmol.viewer.ScriptManager$ScriptQueueRunnable.runNextScript(Unknown Source)
    at org.jmol.viewer.ScriptManager$ScriptQueueRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
I am trying to upgrade from Jmol 11.0.RC3 to Jmol 11.6.13. Some of the method signatures have changed between versions but otherwise my code hasn't changed. I'm experimenting with a couple of very simple examples (included below) to try and work out what is going wrong. If anyone could shed some light on the matter I would be very grateful.

Many thanks,
Chris Foley.



This example uses Jmol 11.0.RC3 and works perfectly:

package abc;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.io.File;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;

import org.jmol.adapter.smarter.SmarterJmolAdapter;
import org.jmol.api.JmolViewer;

public class OldJmolDemo extends JPanel {
   
    static final long serialVersionUID = 0;
    private JmolViewer viewer;

    public OldJmolDemo(File pdbFile) {
        viewer = JmolViewer.allocateViewer(this, new SmarterJmolAdapter(null) );
        viewer.openFile( pdbFile.toString() );
    } // constructor

    public JmolViewer getViewer() {
        return viewer;
    }

    private final Dimension currentSize = new Dimension();
    private final Rectangle rectClip = new Rectangle();

    @Override
    public void paint(Graphics g) {
        getSize(currentSize);
        g.getClipBounds(rectClip);
        viewer.renderScreenImage(g, currentSize, rectClip);
      } // paint
   
    public static void main(String[] args) {
        JFileChooser chooser = new JFileChooser();
        if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
           
            OldJmolDemo demo = new OldJmolDemo(chooser.getSelectedFile());
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(demo);
            frame.setSize(500, 500);
            frame.setVisible(true);
           
        } // if
    } // main

} // class



This example uses Jmol 11.6.13 and has the error explained above. The code is almost identical so the differences are highlighted in bold.

package abc;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.io.File;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;

import org.jmol.adapter.smarter.SmarterJmolAdapter;
import org.jmol.api.JmolViewer;
import org.jmol.viewer.Viewer;

public class NewJmolDemo extends JPanel {
   
    static final long serialVersionUID = 0;
    private JmolViewer viewer;

    public NewJmolDemo(File pdbFile) {
        viewer = new Viewer(this, new SmarterJmolAdapter());
        // Using JmolViewer instead of Viewer produces identical results.
        viewer.openFile( pdbFile.toString() );
    } // constructor

    public JmolViewer getViewer() {
        return viewer;
    }

    private final Dimension currentSize = new Dimension();
    private final Rectangle rectClip = new Rectangle();

    @Override
    public void paint(Graphics g) {
        getSize(currentSize);
        g.getClipBounds(rectClip);
        viewer.renderScreenImage(g, currentSize, rectClip);
      } // paint
   
    public static void main(String[] args) {
        JFileChooser chooser = new JFileChooser();
        if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
           
            NewJmolDemo demo = new NewJmolDemo(chooser.getSelectedFile());
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(demo);
            frame.setSize(500, 500);
            frame.setVisible(true);
           
        } // if
    } // main

} // class


------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Jmol-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jmol-users

Reply via email to