昨天在幫一個博士班學生處理 mixed model 的 model diagnostics 問題時,使用 PROC MIXED 程序並配合 ODS GRAPHICS 來產生圖形時,發現 log 裡面出現這一行錯誤訊息:

Java class generated an exception

由於兩年前我在考資格考時還有用過這道指令,記得當時可以順利生出 model diagnostics 的圖形,不過這兩年一直都沒再使用這個功能,所以完全搞不清楚這個錯誤訊息是怎麼跑出來的,因此只好去 SAS 官網上面找看看。果真看到 SAS support 網頁下有說明這個錯誤訊息的源由:

The following messages can appear in the SAS Log when using the JAVAIMG
device driver with ODS GRAPHICS:

Can't load class com/sas/tk/util/SetSTrandardOut.
Can't redirect System.err to SAS log.

Can't load class com/sas/tk/util/SetstandardOut.
Can't redirect System.out to SAS log.

Can't load class com/sas/tk/util/SetStandardOut.
System.out not restored
Can't load class com/sas/tk/util/SetStandardOut.
System.err not restored
Error: Java class generated an exception.

The following error is written to the Java console:

java.lang.NoClasDefFoundError: GraphSSR

This problem occurs if a version of the JRE higher than 1.4.1 has been
installed on the system.

To circumvent the problem, remove any version of the JRE that is higher
than 1.4.1. This can be done from ADD/REMOVE PROGRAMS within the
Control Panel on your Windows operating system.

大意是說,由於電腦裡面安裝的 JRE 版本高過 1.4.1,所以導致這個 ODS 的功能無法使用。至於 JRE 是什麼,我只知道跟 JAVA 有關,而且這種東西微軟經常會自動更新,所以啥時把我的 JRE 版本升級的我也不太曉得。依照上述的說明,只要移除 JRE 即可,但由於昨天是使用辦公室的電腦,我不敢亂動免得搞壞了被 IT 罵,所以就去拜股溝大神,看看有沒有不用移除 JRE 就可以解決的方案,果然在一個 google group 的討論串裡面找到解決的方法,而這個解決的方法基本上是從一篇在 Pharmascutical SAS User Group 2007 的技術文件裡面出來的,而且作者還是三個在 Duke University 的癌症中心工作的研究人員。

這篇文章可以從這個網址下載:http://www.lexjansen.com/pharmasug/2007/ad/ad14.pdf

解決步驟如下:

Step 1: 在 SAS 安裝的根目錄 nls\en\ 裡面找到一個名為 sasv9.cfg 的檔案

Step 2: 編輯 sasv9.cfg 前先備份起來,可直接用 copy/paste

Step 3: 用小作家去開啟這個檔案,然後用搜尋的去找一個關鍵字叫做 JREOPTIONS

Step 4: JREOPTIONS 後面有很長一串看不懂的文字,搜尋「-Xbootclasspath/p:!sasroot\core\sasmisc\sas.ads.webAFrt.jar」並刪除,如果沒有這一串文字,那就跳過去進行下一步驟

Step 5: 在同一行繼續去搜尋關鍵字「–Dsas.jre=private」,然後把「private」改成「public」

Step 6: 然後去安裝 SAS 的根目錄下進入 core\sasexe\,找出 jldplgin.dll 檔案,並重新命名為 jldplgin.old 就大功告成了

不過,根據我自己試驗的結果,Step1 到 Step 5 都沒問題,但 Step 6 卻發現我的 core\sasexe\ 目錄底下沒有 jldplgin.dll,但我想反正這個步驟只是重新命名,意思也是要讓 SAS 不要去用這個檔案,所以沒檔案應該沒差。可惜的是,經過上述步驟調整後還是會出現那個錯誤訊息。

後來那個博士班學生跑去電腦教室找一台電腦把 JRE 完全移除後,ODS GRAPHICS 的功能就正常了,不過那台電腦沒了 JRE,好像就不能開啟一些含有 JAVA 的東西。如果有人能夠在照著那三個 Duke 的研究人員所提出的方法順利解決這個問題當然是最好的,不然就是要一直安裝反安裝 JRE,否則現在一堆網站都不能看了。

另外,我又在一個 Google group 的 SAS 討論串裡面看到有人寫說 SAS V9.2 已經解決了這個問題,問題是我們現在還拿不到 SAS V9.2 的版本。雖然在 JSM 會議時我去 SAS 的攤位問,那 agent 說今年二月就把 V9.2 釋出了,但回來後經詢問校方 IT 部門得到的結論是,目前只開放給有特殊需要的 faculty 和 staff 使用,學生還不能申請。總覺得要能在畢業前用到 V9.2 似乎有點渺茫。

arrow
arrow
    全站熱搜

    cchien 發表在 痞客邦 留言(0) 人氣()