Exception in thread “main” 終極解決方案
此文章是在AIX作業系統正確安裝了CDE前提下進行進行說明的。
在安裝了Oracle的伺服器上執行dbca 命令,報錯:
[oracle@stone_db ~]$ dbca
Exception in thread "main"
[oracle@stone_db ~]$
[oracle@stone_db ~]$ export DISPLAY=1921.68.1.210:0.0
[oracle@stone_db ~]$ dbca
Exception in thread "main"
其實不止是執行dbca會報錯,只要執行需要彈出圖形視窗的命令都會有這樣的問題。
大部分情況下我們會認為是DISPLAY變數的問題,但是也不盡然,我們檢視一下dbca的log 日誌:
[oracle@stone_db scripts]$ cd $ORACLE_HOME/cfgtoollogs/dbca
[oracle@stone_db dbca]$ ls
trace.log
[oracle@stone_db dbca]$ cat trace.log
java.lang.UnsatisfiedLinkError:/home/Oracle_app_10204/jdk/jre/lib/i386/libawt.so:
libXp.so.6: cannot openshared object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1586)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1503)
at java.lang.Runtime.loadLibrary0(Runtime.java:788)
at java.lang.System.loadLibrary(System.java:834)
at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:50)
at java.security.AccessController.doPrivileged(Native Method)
at sun.awt.NativeLibLoader.loadLibraries(NativeLibLoader.java:38)
atsun.awt.DebugHelper.<clinit>(DebugHelper.java:29)
at java.awt.Component.<clinit>(Component.java:506)
at oracle.sysman.assistants.util.wizard.WizardObject.<init>(WizardObject.java:64)
at oracle.sysman.assistants.dbca.ui.DBCAWizard.<init>(DBCAWizard.java:425)
at oracle.sysman.assistants.dbca.ui.UIHost.<init>(UIHost.java:214)
at oracle.sysman.assistants.dbca.ui.InteractiveHost.<init>(InteractiveHost.java:54)
at oracle.sysman.assistants.dbca.Dbca.getHost(Dbca.java:160)
at oracle.sysman.assistants.dbca.Dbca.execute(Dbca.java:94)
at oracle.sysman.assistants.dbca.Dbca.main(Dbca.java:180)
原因很明顯缺包:
libXp.so.6: cannot open shared object file:No such file or directory
驗證一下包:
[oracle@stone_db dbca]$ rpm -qa|grep libXp
libXpm-devel-3.5.5-3
libXpm-3.5.5-3
安裝libXp :
[root@stone_db Server]# ll
-rwxrwSrwx 1 root root 22996 2007-07-26libXp-1.0.0-8.1.el5.i386.rpm
-rwxrwSrwx 1 root root 15262 2007-07-26libXp-devel-1.0.0-8.1.el5.i386.rpm
[root@stone_db Server]# rpm -ivh libXp*.rpm
warning: libXp-1.0.0-8.1.el5.i386.rpm:Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:libXp ########################################### [ 50%]
2:libXp-devel ########################################### [100%]
[root@stone_db Server]# rpm -qa|grep libXp
libXpm-devel-3.5.5-3
libXp-1.0.0-8.1.el5
libXpm-3.5.5-3
libXp-devel-1.0.0-8.1.el5
再次執行dbca成功:
[root@stone_db ~]# xhost +
access control disabled, clients canconnect from any host
[root@stone_db ~]# su - oracle
[oracle@stone_db ~]$ export DISPLAY=192.168.1.210:0.0
[oracle@stone_db ~]$ dbca
另外一種情況就是不缺包,用oracle使用者直接登入可以執行dbca順利開啟圖形視窗。用root登入xshell然後執行xhost +,
再切換su - oracle 改變使用者身份,結果執行dbca不能開啟圖形視窗。
用root登入CDE,
bash-3.2# xhost +
access control disabled, clients can connect from any host
bash-3.2# su - oracle
[oracle@aix275 ~]# dbca
DISPLAY not set.
Set DISPLAY environment variable, then re-run.
[oracle@aix275 ~]# who
root tty0 Jul 08 06:32
root pts/0 Jul 08 05:49 (192.168.1.210)
oracle pts/1 Jul 08 05:56 (192.168.1.210)
root pts/2 Jul 08 05:58 (192.168.1.210)
root dtremote Jul 08 06:34 (192.168.1.210:0)
root pts/3 Jul 08 06:34 (192.168.1.210:0.0)
root pts/4 Jul 08 00:53 (192.168.1.210)
[oracle@aix275 ~]# export DISPLAY=192.168.1.210:0.0
[oracle@aix275 ~]# dbca
正常開啟圖形視窗。
但是在xshell下,執行同樣步驟卻不能開啟圖形視窗。
檢視trace.log檔案發現DISPLAY變數設定的不正確,不能使用192.168.1.210:0.0
[oracle@aix ~]# cat /database/product/10.2.0/db_1/cfgtoollogs/dbca/trace.log
java.lang.InternalError: Can't connect to X11 window server using '192.168.1.210:0.0' as the
value of the DISPLAY variable.
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:175)
at java.lang.Class.forName1(Native Method)
at java.lang.Class.forName(Class.java:180)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment
(GraphicsEnvironment.java:91)
at java.awt.Font.initializeFont(Font.java:333)
at java.awt.Font.<init>(Font.java:368)
at oracle.ewt.lwAWT.LWComponent.<clinit>(Unknown Source)
at oracle.sysman.assistants.util.wizard.WizardObject.<init>(WizardObject.java:64)
at oracle.sysman.assistants.dbca.ui.DBCAWizard.<init>(DBCAWizard.java:425)
at oracle.sysman.assistants.dbca.ui.UIHost.<init>(UIHost.java:214)
at oracle.sysman.assistants.dbca.ui.InteractiveHost.<init>(InteractiveHost.java:54)
at oracle.sysman.assistants.dbca.Dbca.getHost(Dbca.java:160)
at oracle.sysman.assistants.dbca.Dbca.execute(Dbca.java:94)
at oracle.sysman.assistants.dbca.Dbca.main(Dbca.java:180)
後來開啟多個圖形終端,然後用who命令檢視。
[root@aix /]# who
root tty0 Jul 08 06:32
root pts/0 Jul 08 05:49 (192.168.1.210)
oracle pts/1 Jul 08 05:56 (192.168.1.210)
root pts/2 Jul 08 05:58 (192.168.1.210)
root dtremote Jul 08 06:34 (192.168.1.210:0)
root pts/3 Jul 08 06:34 (192.168.1.210:0.0)
root dtremote Jul 08 00:53 (192.168.1.210:1)
oracle dtremote Jul 08 06:44 (192.168.1.210:2)
oracle dtremote Jul 08 06:51 (192.168.1.210:3)
透過觀察不難發現一個規律,也就是第一個開啟的圖形終端為IP:0,在裡面執行dbca彈出的圖形視窗為IP:0.0。
第二個開啟的圖形視窗占用的終端序號為IP:1,在其內部執行dbca命令彈出視窗則為IP:1.0。後面開啟的終端以此類推序號。
那麼我們開啟的Xshell其實也是一個終端,只不過平時佔用的是字元終端,當我們執行dbca的時候會彈出圖形視窗,
因此這個時候也會佔用一個圖形終端序號,經上述推理,也就很容易在Xshell終端設定正確的DISPLAY引數了,
也就是看一下我們要開啟的是佔用第幾個圖形終端,假定為n,那麼我們設定
DISPLAY引數值就為“開啟終端所在計算機的IP:n-1.0”。
那麼回過頭來再想一下,為什麼用oracle使用者直接登入就不存在任何題呢,而用root使用者登入再su到oracle使用者身份就出
現這個報錯呢。其實很簡單,我們不論用哪個使用者身份登入到一個終端的時候執行echo DISPLAY發現預設設定好了一個值就
是localhost:n.0,當我們切換使用者身份以後再執行echo DISPLAY發現這個值不見了,此時就需要我們認為設定這個值了,指定
在哪個終端開啟圖形視窗。
回想一下網上的帖子設定的DISPLAY引數都是IP:0.0,也就是在開啟的第一個圖形終端裡設定的,或者是在沒有開啟圖形
終端時在命令列終端裡設定的情況。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31547066/viewspace-2651800/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Exception in thread “main“ java.lang.ArrayStoreException解決方案(記錄一下)ExceptionthreadAIJava
- 解決:Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root.ExceptionthreadAIJavaElasticsearch
- Exception in thread "main" java.lang.NullPointerException: Cannot invokeExceptionthreadAIJavaNull
- jmeter報錯“Uncaught exception in thread Thread[AWT-EventQueue-0,6,main]“JMeterExceptionthreadAI
- Java報錯:Exception in thread "main" java.lang.UnsupportedClassVersionErrorJavaExceptionthreadAIError
- Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission deniedUseExceptionthreadAIApacheHadoop
- Appcrawler 執行報錯 Exception in thread "main" java.lang.NullPointerExceptionAPPExceptionthreadAIJavaNull
- 終極自託管解決方案指南
- mac php環境終極解決方案MacPHP
- 前端(React)生成pdf終極解決方案(^_^)前端React
- Loguru:Python 日誌終極解決方案Python
- H5定位終極解決方案H5
- Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/http/conn/socket/LayeredConnecExceptionthreadAIJavaErrorApacheHTTP
- JavaWeb 亂碼問題終極解決方案!JavaWeb
- INSTALL_FAILED_NO_MATCHING_ABIS終極解決方案AI
- YII2.0 jQuery(…).activeform is not a function in 終極解決方案jQueryORMFunction
- web app 無限載入終極解決方案WebAPP
- [iOS]終極橫豎屏切換解決方案iOS
- JavaScript 資料型別檢測終極解決方案JavaScript資料型別
- myeclipse執行tomcat報錯Exception in thread "main" java.lang.OutOfMemoryError: PermGen space...EclipseTomcatExceptionthreadAIJavaError
- 單元件多UI形態的終極解決方案(React)元件UIReact
- golang定時任務踩坑及終極解決方案Golang
- WordPress中實現Markdown編輯的終極解決方案
- Mac無法清倒廢紙簍,終極解決方案Mac
- pod install / pod update 速度慢的終極解決方案
- WIN10系統藍屏終止程式碼SYSTEM_SERVICE_EXCEPTION解決方案Win10Exception
- Navicat Premium for Mac:多資料庫管理的終極解決方案REMMac資料庫
- 下拉選單「點選外面關閉」的終極解決方案
- DBeaverUltimate for Mac v23.3.1終極版:終極資料庫管理解決方案Mac資料庫
- 快取熱點,快取穿透,終極解決方案看過來快取穿透
- 初識react(五) 資料流終極解決方案 dva(零配置)React
- 關於開發者協議Edit Phone Number終極解決方案協議
- org.hibernate.exception.SQLGrammarException: could not extract ResultSet解決方案ExceptionSQL
- WIN10系統藍色畫面終止程式碼SYSTEM_SERVICE_EXCEPTION解決方案Win10Exception
- 【MySQL篇】Navicat匯入SQL大檔案報錯終極解決方案MySql
- Thinkphp 終極路由解決方案(超級偽靜態)閉包的爽快使用PHP路由
- AndroidStudio3 輸入法不跟著游標問題終極解決方案Android
- flutter防止widget rebuild終極解決辦法FlutterRebuild