iT邦幫忙

0

Open SUSE 11.0 & Tomcat6遇上驗證碼的圖形

最近小弟正在架設tomcat的主機,以提供中國那邊的程式開發同仁把用java開發的系統放到上來,幾經努力之後看似一切平順了,但是卻發現驗證碼的數字圖片跑不出來,後來去查log之後,發現有以下這樣的錯誤訊息:
「2009/4/13 銝? 09:06:20 org.apache.catalina.core.StandardWrapperValve invoke?湧??? Servlet.service() for servlet ImageCaptchaServlet threw exception java.lang.IncompatibleClassChangeError: Found class com.sun.image.codec.jpeg.JPEGImageEncoder, but interface was expected」
後來是有高手指點要在JDK底下找到「JPEGCodec.java和JPEGImageEncoder.java」,但是在不論我是用open suse 11.0內含的openjdk1.6或是上sun的網站下載的jre-6u13-linux-i586-rpm.bin或jre-6u13-linux-i586.bin也都找不到這東西。

請教各位是否這些訊息另有其意而我方向也錯誤亦或是我可以用什麼其他的解決方法?

18
fillano
iT邦超人 1 級 ‧ 2009-04-15 12:15:26
最佳解答

先確認兩件事:

  1. 開發與執行的環境是否一致(都是同一個版本的jdk跟jre嗎?)
  2. 發布前有重新編譯嗎?

要看你們的程式怎麼寫。理論上sun.awt.image.codec.JPEGImageEncoderImpl跟com.sun.image.codec.jpeg.JPEGImageEncoder應該都在JAVA_HOME/lib/rt.jar裡面,不應該有這個問題出現...

18
海綿寶寶
iT邦大神 1 級 ‧ 2009-04-15 12:08:11

標題是OpenSuSe和Tomcat
但錯誤訊息似乎是JAI的問題

參考Java Advancded Imaging API,下載看看有沒有你要的library

18
bizpro
iT邦大師 1 級 ‧ 2009-04-15 14:41:20

java.lang.IncompatibleClassChangeError: Found class com.sun.image.codec.jpeg.JPEGImageEncoder, but interface was expected
錯誤訊息說的很清楚, 這是一個bug. 因為com.sun.image.codec.jpeg.JPEGImageEncoder應該是一個interface而不是一個class. 但是在你的JDK中卻是一個class. 我想這是OpenSuse的問題了, 請改用sun下載下來的, 我檢查過我的JDK 1.6.0_12過了, com.sun.image.codec.jpeg.JPEGImageEncoder是interface沒錯, 所以你應該要換JDK.

我要發表回答

立即登入回答