- 論壇徽章:
- 0
|
我的java程序中加載了一個c寫的so庫,然后java作為api接口供php調(diào)用,現(xiàn)在遇到了一個問題,就是php調(diào)用java時,java會去連so庫,然后第一次頁面顯示正常,再刷新就出現(xiàn)問題了,錯誤提示如下:
Fatal error: Uncaught [o(Exception):"java.lang.Exception: CreateInstance failed: new StreamFountJava.SFountAPI. Cause: java.lang.UnsatisfiedLinkError: Native Library /usr/lib/libsfount_api.so already loaded in another classloader"] thrown in /home/mbos/php_java.php on line 10
再刷新出現(xiàn):
Fatal error: Uncaught [o(Exception):"java.lang.Exception: CreateInstance failed: new StreamFountJava.SFountAPI. Cause: java.lang.ClassNotFoundException: Unresolved external reference: java.lang.NoClassDefFoundError. -- Unable to call constructor because it or one of its parameters refer to the mentioned external class which is not available in the current "java_require()" url path. Remember that all interconnected classes must be loaded with a single java_require() call, i.e. use java_require("foo.jar;bar.jar") instead of java_require("foo.jar"); java_require("bar.jar"). Please check the Java Bridge log file for details."] thrown in /home/mbos/php_java.php on line 10
StreamFountJava.SFountAPI是我做的一個package,已將其打成.jar給php調(diào)用了,libsfount_api.so 是我的so庫
第一次是顯示正常的!
再次刷新產(chǎn)生的錯誤是由于第一個錯誤引起的,因為第一個錯誤提示說我的so庫已經(jīng)存在于其他的classloader中了,所以導致第二次刷新的時候出錯,天呢,調(diào)用so庫的不是同一個.jar里的class嘛
我的想法:能不能在java運行完釋放掉so庫?能釋放嗎?
順便提一下無關的問題,我在VMware里的linux下執(zhí)行刷新頁面不會出錯,只有重新將我的SFountAPi.class連同目錄打包成.jar后才會出現(xiàn)上述問題,可是在純正的linux環(huán)境下直接刷新就會出現(xiàn)這個問題,這是為什么?
PS:重啟apache就能再正確顯示一次
我用的是apache2+php5+php-java-bridge來完成php調(diào)用java的。 |
|