Hi,
I am trying to write an application using visad which reads a datafile
and displays it in a JInternalFrame. The first time display works fine
but when I clear the internal frame and try to display a second time
I get the following exception:
visad.TypeException: ScalarType: name already used
Any help would be appreciated. The source files are attached.
Thanks,
Nash'at
import visad.*;
import visad.util.*;
import visad.java2d.DisplayImplJ2D;
import java.rmi.RemoteException;
import javax.swing.*;
import javax.swing.event.*;
import javax.accessibility.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.beans.*;
public class OmegaWindowManager extends JPanel implements
ActionListener {
// ...................................................................
// . <CLASS> .
// ...................................................................
// ===================================================================
OmegaClient omega;
private TerrainView terrView;
private int icase = 0;
// define variables
JButton closButton, terrButton;
JLayeredPane lc;
JInternalFrame setCase;
// *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*
public OmegaWindowManager(OmegaClient omega) throws VisADException,
RemoteException {
// ...................................................................
// . <CONSTRUCTOR> .
// ...................................................................
// ===================================================================
super();
this.omega = omega;
setLayout(new BorderLayout());
lc = new JDesktopPane();
lc.setOpaque(false);
setCase = CaseSetupFrame();
lc.add(setCase, JLayeredPane.PALETTE_LAYER);
add("Center", lc);
}
// *******************************************************************
public JInternalFrame CaseSetupFrame() {
// ...................................................................
// . <METHOD> .
// ...................................................................
// ===================================================================
JInternalFrame w;
JPanel tp, bp;
Container contentPane;
w = new JInternalFrame("Case Setup");
contentPane = w.getContentPane();
contentPane.setLayout(new BorderLayout());
// button panel
bp = new JPanel();
bp.setLayout(new GridLayout(2, 1));
terrButton = new JButton("Terrain");
terrButton.addActionListener(this);
bp.add(terrButton);
closButton = new JButton("Clear");
closButton.addActionListener(this);
bp.add(closButton);
contentPane.add(bp, BorderLayout.CENTER);
w.setLocation(10,10);
w.setSize(160,80);
w.setResizable(true);
w.setIconifiable(true);
return w;
}
// *******************************************************************
public void actionPerformed(ActionEvent e) {
// ...................................................................
// . <METHOD> .
// ...................................................................
// ===================================================================
// clear the desktop
if ( e.getSource() == closButton ) {
lc.removeAll();
lc.add(setCase);
lc.repaint();
icase = 0;
}
// read the terrain data
else if ( e.getSource() == terrButton && icase == 0 ) {
try {
terrView = new TerrainView();
lc.add(terrView, JLayeredPane.PALETTE_LAYER);
}
catch (VisADException vise) {System.out.println(vise);}
catch (RemoteException rexp) {System.out.println(rexp);}
icase = 1;
} // end elseif terrButton
} // end action method
// *******************************************************************
} // end class OmegaWindowManager
// *******************************************************************
import visad.*;
import visad.util.*;
import visad.java2d.DisplayImplJ2D;
import java.rmi.RemoteException;
import javax.swing.*;
import javax.swing.event.*;
import javax.accessibility.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.beans.*;
class TerrainView extends JInternalFrame {
// ...................................................................
// . <CLASS> .
// ...................................................................
// ===================================================================
String fname;
// define variables
int ntx, nty;
private RealType longitude, latitude;
private RealType altitude;
private RealTupleType domain_tuple;
private FunctionType func_domain_temp;
private Set domain_set;
private FlatField vals_ff;
private float[][] flat_altitude;
private float altmin, altmax;
private float latmin, latmax, lonmin, lonmax;
// The DataReference from data to display
private DataReferenceImpl data_ref;
// The 2D display, and its the maps
private DisplayImpl display;
private ScalarMap latMap, lonMap;
private ScalarMap altRGBMap;
// A GraphicsModeControlWidget
private GMCWidget gmcWidget;
private LabeledColorWidget labelCW;
// *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*
public TerrainView() throws VisADException, RemoteException {
// ...................................................................
// . <CONSTRUCTOR> .
// ...................................................................
// ===================================================================
// Create the quantities => RealType(String name)
latitude = new RealType("latitude");
longitude = new RealType("longitude");
domain_tuple = new RealTupleType(latitude, longitude);
altitude = new RealType("altitude", SI.meter, null);
ntx = 6; nty = 6;
float[][] flat_altitude = new float[1][ntx*nty];
flat_altitude = openTerFile();
lonmin = latmin = 0.0f; lonmax = latmax = 1.0f;
// Create a FunctionType (domain_tuple -> altitude )
// Use FunctionType(MathType domain, MathType range)
func_domain_temp = new FunctionType( domain_tuple, altitude);
// Create the domain Set
domain_set = new Linear2DSet(domain_tuple, latmin, latmax, ntx,
lonmin, lonmax, nty);
// Get the Set samples to facilitate the calculations
float[][] set_samples = domain_set.getSamples( true );
// Create the FlatFields => FlatField(FunctionType type, Set domain_set)
vals_ff = new FlatField( func_domain_temp, domain_set); // image
vals_ff.setSamples( flat_altitude , false );
// Create Display and its maps (a 2D display)
display = new DisplayImplJ2D("display1");
// Get display's graphics mode control and draw scales
GraphicsModeControl dispGMC =
(GraphicsModeControl)display.getGraphicsModeControl();
dispGMC.setScaleEnable(true);
// Create a GMCWidget with the GraphicsModeControl above
gmcWidget = new GMCWidget( dispGMC );
// Create the ScalarMaps: latitude to YAxis, longitude to XAxis and alt. to RGB
// Use ScalarMap(ScalarType scalar, DisplayRealType display_scalar)
latMap = new ScalarMap( latitude, Display.YAxis );
lonMap = new ScalarMap( longitude, Display.XAxis );
altRGBMap = new ScalarMap( altitude, Display.RGB );
// Add maps to display
display.addMap( latMap );
display.addMap( lonMap );
display.addMap( altRGBMap );
labelCW = new LabeledColorWidget( altRGBMap );
// Create data references and set the FlatField as our data
data_ref = new DataReferenceImpl("data_ref");
data_ref.setData( vals_ff );
// Add references to display: first the colored image's reference
display.addReference( data_ref );
// internal frame
this.setSize(400,400);
this.setResizable(true);
this.setIconifiable(true);
this.setClosable(true);
this.setMaximizable(true);
String title = "Terrain";
this.setTitle(title);
this.getContentPane().add(display.getComponent());
try { this.setSelected(true); }
catch (java.beans.PropertyVetoException e2) {}
}
// *******************************************************************
float[][] openTerFile() {
// ...................................................................
// . <METHOD> .
// ...................................................................
// ===================================================================
// for now define a 2D field
float[][] faltitude = new float[1][ntx*nty];
altmin = 10000000000.0f; altmax = -10000000000.0f;
for(int c = 0; c < ntx; c++) {
for(int r = 0; r < nty; r++) {
faltitude[0][ c * nty + r ] = (float)c * (float)r;
}
}
return faltitude;
}
// *******************************************************************
} // end class TerrainView
// *******************************************************************
import visad.*;
import visad.util.*;
import visad.java2d.DisplayImplJ2D;
import java.rmi.RemoteException;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class OmegaClient extends JFrame implements ActionListener {
// ...................................................................
// . <CLASS> .
// ...................................................................
// ===================================================================
OmegaClient omega;
private OmegaWindowManager wp;
private JTabbedPane dPane;
Container contentPane = null;
// Menu bar
private JMenuBar menuBar = new JMenuBar(); // Window menu bar
// File menu items
private JMenuItem exitItem, printItem;
// JFrame
JFrame theFrame;
// Panels within the frame and the stuff that goes on them
JPanel centerPanel;
// ===================================================================
// Constructor
public OmegaClient(String title) {
super(title);
Toolkit theKit = getToolkit(); // Get the window
toolkit
Dimension wndSize = theKit.getScreenSize(); // Get screen size
setBounds(wndSize.width/4, wndSize.height/4, // Position
800, 600); // Size
// content pane
contentPane = this.getContentPane();
// menubar
setJMenuBar(menuBar); // Add the menu bar to the window
JMenu fileMenu = new JMenu("File"); // Create File menu
fileMenu.setMnemonic('F'); // Create shortcut
exitItem = new JMenuItem("Exit");
exitItem.setToolTipText("exit OmegaClient");
exitItem.setAccelerator(KeyStroke.getKeyStroke('Q',Event.CTRL_MASK ));
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
dispose(); // Release the window resources
System.exit(0); // End the application
} } );
fileMenu.add(exitItem);
menuBar.add(fileMenu); // Add the file menu
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
JPanel dbPanel = new JPanel( new BorderLayout() );
dPane = new JTabbedPane(JTabbedPane.TOP);
JPanel advPanel = new JPanel( new BorderLayout() );
try { wp = new OmegaWindowManager(omega); }
catch (VisADException vise) {System.out.println(vise);}
catch (RemoteException rexp) {System.out.println(rexp);}
if ( wp !=null ) {
advPanel.add(wp, BorderLayout.CENTER);
dPane.addTab("Display", advPanel); }
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
contentPane.setLayout(new BorderLayout());
contentPane.add(dPane, BorderLayout.CENTER);
addWindowListener(new WindowHandler());
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setVisible(true);
theFrame = this;
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
}
// *******************************************************************
public void actionPerformed(ActionEvent e) {
// ...................................................................
// . <METHOD> .
// ...................................................................
// ===================================================================
}
// *******************************************************************
private class WindowHandler extends WindowAdapter
// ...................................................................
// . <CLASS> .
// . adapter "convenience" class to handle non-trapped window events .
// ...................................................................
// ===================================================================
{
// Handler for window closing event
public void windowClosing(WindowEvent e)
{
dispose(); // Release the window resources
System.exit(0); // End the application
}
}
// *******************************************************************
public static void main(String[] args) throws VisADException,
RemoteException
// ...................................................................
// . <METHOD> .
// ...................................................................
// ===================================================================
{ new OmegaClient("OMEGA - v0.1"); }
// *******************************************************************
}
// *******************************************************************