ODI 12c Studio在AIX 7.2系统执行odi.sh启动失败如何解决
ODI 12c AIX 7.2 启动Studio报错解决方案
问题说明
安装ODI 12c完成后,在AIX 7.2系统执行./odi.sh启动Studio时抛出UI组件初始化失败错误,错误信息如下:
2021-06-14 16:11:07.651 ERROR Failed to boot IDE cleanly
2021-06-14 16:11:07.893 WARNING Not all children in Menu/ marked with the position attribute: [Tools], but some are: [View, Window]
UIDefaults.getUI() failed: no ComponentUI class for: oracle.ide.controls.StatusBarControl$JDevStatusBar[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=]
对应的栈追踪为:
java.lang.Error at javax.swing.UIDefaults.getUIError(UIDefaults.java:742) at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:141) at javax.swing.UIDefaults.getUI(UIDefaults.java:772) at javax.swing.UIManager.getUI(UIManager.java:1027) at oracle.bali.ewt.statusBar.StatusBar.updateUI(StatusBar.java:480) at oracle.bali.ewt.statusBar.StatusBar.<init>(StatusBar.java:104) at oracle.ide.controls.StatusBarControl$JDevStatusBar.<init>(StatusBarControl.java:264) at oracle.ide.controls.StatusBarControl.<init>(StatusBarControl.java:48) at com.oracle.jdeveloper.nbwindowsystem.NbMainWindow$13.<init>(NbMainWindow.java:1098) at com.oracle.jdeveloper.nbwindowsystem.NbMainWindow.createStatusBar(NbMainWindow.java:1098) at oracle.ide.IdeMainWindow.getStatusBar(IdeMainWindow.java:622) at com.oracle.jdeveloper.nbwindowsystem.NbMainWindow.getStatusBarStatic(NbMainWindow.java:228) at com.oracle.jdeveloper.nbwindowsystem.NbStatusBar.getStatusLineElement(NbStatusBar.java:23) at org.netbeans.core.windows.view.ui.MainWindow$7.run(MainWindow.java:426) at org.netbeans.core.windows.view.ui.MainWindow.getStatusLineElements(MainWindow.java:438) at org.netbeans.core.windows.view.ui.MainWindow.decoratePanel(MainWindow.java:392) at org.netbeans.core.windows.view.ui.MainWindow.access$100(MainWindow.java:81) at org.netbeans.core.windows.view.ui.MainWindow$2.run(MainWindow.java:269) at org.netbeans.core.windows.WindowManagerImpl$Exclusive$1.run(WindowManagerImpl.java:1563) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:322) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:769) at java.awt.EventQueue.access$500(EventQueue.java:108) at java.awt.EventQueue$3.run(EventQueue.java:720) at java.awt.EventQueue$3.run(EventQueue.java:714) at java.security.AccessController.doPrivileged(AccessController.java:704) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.awt.EventQueue.dispatchEvent(EventQueue.java:739) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:216) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:127) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:112) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:104) at java.awt.EventDispatchThread.run(EventDispatchThread.java:93)
问题根因
该错误属于Java Swing UI组件初始化失败,常见触发原因如下:
- 远程连接场景下未开启X11转发,或本地X Server未运行,导致图形渲染环境缺失
- ODI默认的外观(Look and Feel)配置与AIX窗口管理器不兼容,无法加载对应UI渲染类
- AIX系统缺少Swing依赖的X11图形库、字体包等依赖组件
- ODI捆绑的JDK版本在AIX 7.2上存在UI渲染相关的已知兼容性问题
解决方案
按照从易到难的顺序依次尝试以下操作:
- 验证X11转发配置
若通过SSH远程连接AIX启动ODI Studio,首先确认连接时添加了-X参数,命令格式为ssh -X 用户名@AIX主机地址,同时本地已启动X Server程序(MobaXterm默认自动启动,Xming需手动开启)。连接成功后执行echo $DISPLAY,确认输出不为空(格式通常为localhost:10.0类似内容)。 - 修改ODI启动参数
进入ODI安装目录下的odi/studio/bin/路径,编辑odi.conf文件,在AddVMOption配置段新增以下参数:- 设置使用Java跨平台兼容的Metal外观:
AddVMOption -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel - 关闭XRender图形加速避免兼容问题:
AddVMOption -Dsun.java2d.xrender=false - 优化字体渲染配置:
AddVMOption -Dawt.useSystemAAFontSettings=on、AddVMOption -Dswing.aatext=true
保存配置后重新执行./odi.sh启动即可。
- 设置使用Java跨平台兼容的Metal外观:
- 安装系统缺失依赖
执行lslpp -l命令检查AIX系统是否已安装以下依赖包,缺失的包从AIX安装介质中获取安装即可:- X11.apps.rte
- X11.libs
- fontconfig
- 对应语言的字体包(如中文环境需安装中文字体包)
- 替换兼容JDK(可选)
若上述操作均无效,可备份ODI自带的JDK目录,替换为IBM官方发布的兼容AIX 7.2的IBM JDK 8版本,再重新启动ODI Studio即可。
内容的提问来源于stack exchange,提问作者Reja
相关产品推荐
相关产品推荐

