发表用户:讨论贴
收集整理:James.Liu
相关讨论:http://www.mygis.com.cn/forum/dispbbs.asp?boardID=11&ID=9943
信息原始来源:yiczhu

文章标题:用applet做胖客户端开发,却发现,当mdf定义了图层标注后,地图就无法打开,如果没有定义图层标注可正常

yiczhu

高手请帮忙看看[求助]
用applet做胖客户端开发,却发现,当mdf定义了图层标注后,地图就无法打开,如果没有定义图层标注可正常,部分代码如下:  
fileToLoad = getParamete("fileToLoad","http://localhost:8080/map/map.mdf";);
  String m_mxtjURL="http://localhost:8080/mapxtreme47/servlet/mapxtreme";; 
 URL u = new URL(m_fileToLoad);
  URLConnection conn = u.openConnection();
   isRemoteFile = conn.getInputStream();
    myMap.getMapJ().loadMapDefinition(isRemoteFile);
   RendererParams rParams = new RendererParams();
   rParams.setURL(m_mxtjURL);
   rParams.setMime("image/gif");
   myMap.setRendererParams(rParams);

当我map.mdf定义的图层包含标注的时候出现如下:java.security.Acce
ssControlException: access denied (java.net.SocketPermission localhost:8080 connect,resolve) 
at java.security.AccessControlContext.checkPermission(Unknown Source) 
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source) 
at java.lang.SecurityManager.checkConnect(Unknown Source)
at sun.plugin.net.protocol.http.HttpURLConnection.checkPermission(Unknown Source)
at sun.plugin.net.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.plugin.net.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at fsti.mapinfo.MapApplet1.init(MapApplet1.java:103)  at sun.applet.AppletPanel.run(Unknown Source)  
at java.lang.Thread.run(Unknown Source) 


我发现mapxtreme47自带的SimpleMap的例子也存在这个问题,当有标注的时候就出不来
哪个高手帮忙看看!谢谢
 

Marsblade

你把LocalHost改为IP地址试试,Applet不允许访问本地资源吧。

yiczhu

确实正象楼上所说的,改成ip地址后,连图都出不来了,那文档所说的可以通过远程渲染的方式打开mdf是如何实现的?另外mapxtreme for Java?的安装目录下的自带的一个applet例子SimpleMap有没有人能成功运行?还有如果web服务器没有做配置的话可以通过http://host/mapxtreme47/manager可以访问maxptreme for java?的管理器,而且该管理器也是一applet的方式运行,并且可以打开本地表等,是因为manager做了数字签名吗?那是不是以applet方式做胖客户,都应该做数字签名呢?请哪为高手给解答一下,谢谢!

qaz6759347 :


兄弟我也遇到过跟你的差不多的情况!
你看看你的world.mdf文件中的
<Connection>
        <Url>tab:e:/MapInfo/MapXtreme-4.7.1/examples/server/data?remote=http://localhost:8080/mapxtreme471/mapxtreme</Url>
      </Connection>
的格式是否象这样的?如果不是就改为这样。
文件中的每个上面的connection都要写成这样。 

yiczhu :

问题解决了,写个心得吧,以便今后遇到类似问题的朋友们参考。
1、定义mdf定义的时候,要用"mapxtreme java manager web server"来定义,不能用“maxtreme java manager stand alone”来定义,如果不是,也可以按照楼上兄弟所说的那样,修改mdf定义。
2、访问applet的时候,要ip访问,不能用localhost来访问(我运行mapxtreme的时候就是犯了这个错误)。
3、由于是用远程渲染,所以要设置setRendererParams,并且要在loadMapDefinition之前,我原来的setRendererParams,是在loadMapDefinition之后。(这是我犯的第二个错误)。
其他的问题象缺少jar包,之类的错误,可以在控制台上看出来比较容易解决。