[转]WorldWind开发中WorldWindowGLCanvas .setPreferredSize()函数找不到
值高温假期,无意翻到了csdn中三维GIS开发的专栏,讲的是worldwind Java三维GIS系统开发的东西,十分感兴趣。恰巧要求的环境已经存在,直接耍起来。将最新的Worldwind和JOGL下载回来,解压加载,然后测试Java和JOGL,一切都很顺利。然而,将第一个demo敲入package的时候,却发现WorldWindowGLCanvas中没有setPreferredSize()函数的实现。第一想法,demo太老了,可能是worldwind最新版把这个函数遗弃了,换了新的函数。但是,搜了一下最新的worldwind样例,发现仍有该函数的使用。Google一下,关于该函数无法找到的问题不只我一个,worldwind社区和stackoverflow论坛中也有不少提问,没有统一的解决办法,在论坛回复中可以看出大多数人是没遇到的。之后开始怀疑Linux之前是不是被我卸载东西搞坏了,又放到了windows系统环境下试了试,同样出现问题。晚饭过后,扒拉开worldwind api说明,发现是继承的javax.media.opengl.awt.GLCanvas里的问题。
出错原因:
JOGL的引用,我是按照官方jogamp.org下载的jogamp-all-platforms.7z来的。worldwind包里gluegen-rt.jar和jogl-all.jar与官方的jar不同。因此,问题就出这里了,将worldwind包里的这两个JOGL的文件拷贝,并引用到Eclipse工程的external_lib中即可,不用官方的最新版。
注意:
Linux 32位,需要以下四个:gluegen-rt.jar,gluegen-rt-natives-linux-i586.jar,jogl-all.jar,jogl-all-natives-linux-i586.jar
Linux 64位,需要以下四个:gluegen-rt.jar,gluegen-rt-natives-linux-amd64.jar,jogl-all.jar,jogl-all-natives-linux-amd64.jar
windows 32位,需要以下四个:gluegen-rt.jar,gluegen-rt-natives-windows-i586.jar,jogl-all.jar,jogl-all-natives-windows-i586.jar
windows 64位环境下,需要以下四个:gluegen-rt.jar,gluegen-rt-natives-windows-amd64.jar,jogl-all.jar,jogl-all-natives-windows-amd64.jar
Demo运行结果:
代码:
package gov.nasa.worldwind.study; import gov.nasa.worldwind.Model; import gov.nasa.worldwind.WorldWind; import gov.nasa.worldwind.avlist.AVKey; import gov.nasa.worldwind.awt.WorldWindowGLCanvas; import gov.nasa.worldwind.util.StatusBar; import gov.nasa.worldwindx.examples.LayerPanel; import java.awt.BorderLayout; import java.awt.Dimension; import javax.swing.JFrame; public class extends JFrame { protected WorldWindowGLCanvas worldWindowGLCanvas; protected StatusBar statusBar; protected Model modelEarth; protected LayerPanel layerPanel; public () { Dimension canvasSize = new Dimension(850, 650); this.worldWindowGLCanvas = new WorldWindowGLCanvas(); this.worldWindowGLCanvas.setPreferredSize(canvasSize); //创建Earth模型,并与画面绑定 modelEarth = (Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME); this.worldWindowGLCanvas.setModel(modelEarth); this.add(this.worldWindowGLCanvas, BorderLayout.CENTER); //增加状态栏 this.statusBar = new StatusBar(); this.add(statusBar, BorderLayout.PAGE_END); this.statusBar.setEventSource(worldWindowGLCanvas); //显示图层面板 layerPanel = new LayerPanel(worldWindowGLCanvas); this.add(layerPanel, BorderLayout.WEST); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); this.setSize(canvasSize); } public static void main(String[] args) { String title = "系统"; AppDemo1 app = new AppDemo1(); app.setTitle( "WorldWindDemo"+":" + title); app.setVisible(true); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2019-02-14 Qt+Qgis二次开发:在状态条显示当前鼠标坐标
2019-02-14 Qt+QGis二次开发:矢量图层的显示样式
2019-02-14 Qt+QGIS二次开发:QGIS里的编程模型
2019-02-14 Qt+QGIS二次开发:开发环境搭建(超级详细)
2019-02-14 Qt+QGis二次开发:创建临时图层并添加要素
2019-02-14 Qt+Qgis二次开发:地理实体抽象
2019-02-14 Qt+QGis二次开发:加载栅格图层和矢量图层