Greetings all,
I have a small visad application which I am running as an applet, either
from Netscape with the Java plug-in or using the AppletViewer. The
applet sits on a web server with visad.jar. When run, it communicates
via RMI to a server program running on another machine (which in turn
talks to some weather databases via JDBC).
The applet uses DisplayImplJ3D to show a map of weather stations, with
their period of operation in the z-axis.
I've included the code below in case it is relevant.
The thing basically works, but with one annoying aspect. I have to grant
the codebase http:...visad.jar AllPermission to avoid getting the
following message when I rotate the 3D display:
Exception occurred during Behavior execution:
java.lang.SecurityException: Access denied to ThreadGroup not owned by
applet
at
sun.applet.AppletSecurity.getThreadGroup(AppletSecurity.java:241)
at java.lang.Thread.init(Thread.java:251)
at java.lang.Thread.<init>(Thread.java:325)
at visad.util.ThreadPool$ThreadMinnow.<init>(ThreadPool.java:63)
at visad.util.ThreadPool.queue(ThreadPool.java:166)
at visad.ActionImpl.notifyAction(ActionImpl.java:263)
at visad.DisplayImpl.controlChanged(DisplayImpl.java:682)
at visad.Control.incTick(Control.java:98)
at visad.Control.changeControl(Compiled Code)
at
visad.java3d.ProjectionControlJ3D.setMatrix(ProjectionControlJ3D.java
:82)
at visad.MouseHelper.processEvent(MouseHelper.java:371)
at visad.java3d.MouseBehaviorJ3D.processStimulus(Compiled Code)
at javax.media.j3d.BehaviorScheduler.processBehaviors(Compiled
Code)
at javax.media.j3d.BehaviorScheduler.run(Compiled Code)
I don't like granting codeBases AllPermission, but if I try granting all
the other permissions I still seem to get the exception. Can anybody
help?
Here is the visad code:
RealTupleType stationSpan
new RealTupleType(RealType.Latitude,
RealType.Longitude,RealType.Time);
int nstations=testquery.stations.size();
System.out.println("Number of stations to plot "+nstations);
float span[][]=new float[3][2];
Gridded3DSet[] accum = new Gridded3DSet[nstations];
for (int i=0;i<nstations;i++){
ClientStation current=(ClientStation)
testquery.stations.elementAt(i);
java.util.Date dummytime=current.operational.getEnd();
if (dummytime==null)
dummytime=localCalendar.getTime();
span[0][0]=(float) current.latitude;
span[1][0]=(float) current.longitude;
span[2][0]=(float) current.operational.getStart().getTime();
span[0][1]=(float) current.latitude;
span[1][1]=(float) current.longitude;
span[2][1]=(float) dummytime.getTime();
accum[i] = new Gridded3DSet(stationSpan,span,2);
}
UnionSet happyUnion = new UnionSet(stationSpan,accum);
final DataReference stations_ref = new
DataReferenceImpl("stations");
stations_ref.setData(happyUnion);
// create a Display using Java3D
DisplayImpl display = new DisplayImplJ3D("image display");
// map earth coordinates to display coordinates
display.addMap(new ScalarMap(RealType.Latitude, Display.YAxis));
display.addMap(new ScalarMap(RealType.Longitude,
Display.XAxis));
display.addMap(new ScalarMap(RealType.Time, Display.ZAxis));
GraphicsModeControl mode=display.getGraphicsModeControl();
mode.setScaleEnable(true);
// link the Display to rivers_ref
display.addReference(stations_ref);
try {
BaseMapAdapter baseMap = new BaseMapAdapter(new
URL("http://mayumi.narc.affrc.go.jp/~matthewl/visadapplet/OUTLSUPW"));
baseMap.setLatLonLimits(latMin,latMax,longMin,longMax);
Data mapData = baseMap.getData();
DataReference mapRef = new DataReferenceImpl("mapData");
mapRef.setData(mapData);
ConstantMap[] rendMap;
rendMap = new ConstantMap[1];
rendMap[0] = new ConstantMap(-.99, Display.ZAxis);
display.addReference(mapRef, rendMap);
} catch (Exception mapop) {
mapop.printStackTrace();
}
// create JPanel in JFrame
panel3D.setLayout(new BoxLayout(panel3D, BoxLayout.Y_AXIS));
panel3D.setAlignmentY(JPanel.TOP_ALIGNMENT);
panel3D.setAlignmentX(JPanel.LEFT_ALIGNMENT);
// add display to JPanel
panel3D.add(display.getComponent());
--
Matthew Laurenson
National Agriculture Research Center
Ministry of Agriculture, Forestry and Fisheries
3-1-1 Kannondai
Tsukuba
Ibaraki 305-8666
JAPAN
ph +81-298-38-7025
fax +81-298-38-8551