我在加載dll時出現了問題,位於我的Java代碼中的dll文件夾文件中。爲了簡單 - 我嘗試執行加載dll裏面exampleTest.java但我得到UnsatisiefLinkException。從項目中的外部文件夾加載dll庫 - Java
我想:
InputStream in = this.getClass().getClassLoader().getResourceAsStream("../dll/file.dll");
但它不工作。有沒有人有任何想法如何解決這個問題?
我在加載dll時出現了問題,位於我的Java代碼中的dll文件夾文件中。爲了簡單 - 我嘗試執行加載dll裏面exampleTest.java但我得到UnsatisiefLinkException。從項目中的外部文件夾加載dll庫 - Java
我想:
InputStream in = this.getClass().getClassLoader().getResourceAsStream("../dll/file.dll");
但它不工作。有沒有人有任何想法如何解決這個問題?
添加dll
到運行時類路徑和更改您的代碼
InputStream in = this.getClass().getClassLoader().getResourceAsStream("/dll/file.dll");
如何將eclipse中的dll添加到運行時類路徑中? – 2012-08-13 10:00:07
如果它是Web項目的dll應該在WEB-INF/lib下,一般來說它應該放在你的根類包旁邊,與com並行(包含類) – 2012-08-13 10:02:02
getResourceAsStream()
認爲你的源文件夾中的「文件系統」的根。據我所知,如果此文件夾位於src
文件夾之外,則無法通過getResourceAsStream()
訪問文件夾。
如果要訪問該dll文件,請將dll文件夾移動到src文件夾。並通過
getResourceAsStream("/dll/file.dll")
檢查this post。這是關於另一個問題,但主要觀點是我想的。
如果你想加載它作爲資源,你應該把你的dll
文件夾放到源文件夾中。 右擊文件夾上 - >構建路徑 - >用作源文件夾
然後,您可以簡單地加載它是這樣的:
InputStream in = this.getClass().getClassLoader().getResourceAsStream("dll/file.dll");
抱歉,但是這個解決方案沒有工作......任何其他想法? – 2012-08-13 10:51:14
可能嘗試這樣的事情。
你不需要包含dll,但路徑應該足夠。
System.setProperty( 「的java.library.path」, 「/ DLL」 + File.pathSeparator +
System.getProperty( 「的java.library.path」));
在執行代碼之前添加上面的行。這會將dll路徑添加到jvm運行時庫。
而且它還取決於您從哪裏運行應用程序的文件夾。你需要給dll文件夾一個相對路徑。或者,您可以提供完全限定的路徑,但不建議從項目配置的角度來看。
如果你只是想導入它,你總是可以使用系統loadLibrary和nio。路徑是這樣的:
System.loadLibrary(Paths.get("/dll/file.dll").toString());
這實際上是一個包裝:
Runtime.getRuntime().loadLibrary(Paths.get("/dll/file.dll").toString())
我認爲你所要完成或多或少什麼已經在這裏討論:How to make a JAR file that includes DLL files?
如果您試着更好地描述你真正想要達成的目標,那麼它會更容易理解並給出準確的答案。
爲什麼你想要將DLL作爲輸入流?你想達到什麼目的? – maba 2012-08-13 09:55:18
它是你以前的問題的延續:http://stackoverflow.com/questions/11929864/java-with-jacob-how-to-properly-set-java-library-path? – maba 2012-08-13 10:14:53
您再次發佈完全相同的問題:http://stackoverflow.com/questions/11345657/dealing-with-getresourceasstream-for-outside-file – maba 2012-08-13 10:23:24