2012-08-13 85 views
0

我在加載dll時出現了問題,位於我的Java代碼中的dll文件夾文件中。爲了簡單 - 我嘗試執行加載dll裏面exampleTest.java但我得到UnsatisiefLinkException從項目中的外部文件夾加載dll庫 - Java

Project structure

我想:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("../dll/file.dll"); 

但它不工作。有沒有人有任何想法如何解決這個問題?

+0

爲什麼你想要將DLL作爲輸入流?你想達到什麼目的? – maba 2012-08-13 09:55:18

+0

它是你以前的問題的延續:http://stackoverflow.com/questions/11929864/java-with-jacob-how-to-properly-set-java-library-path? – maba 2012-08-13 10:14:53

+0

您再次發佈完全相同的問題:http://stackoverflow.com/questions/11345657/dealing-with-getresourceasstream-for-outside-file – maba 2012-08-13 10:23:24

回答

0

添加dll到運行時類路徑和更改您的代碼

InputStream in = this.getClass().getClassLoader().getResourceAsStream("/dll/file.dll"); 
+0

如何將eclipse中的dll添加到運行時類路徑中? – 2012-08-13 10:00:07

+0

如果它是Web項目的dll應該在WEB-INF/lib下,一般來說它應該放在你的根類包旁邊,與com並行(包含類) – 2012-08-13 10:02:02

0

getResourceAsStream()認爲你的源文件夾中的「文件系統」的根。據我所知,如果此文件夾位於src文件夾之外,則無法通過getResourceAsStream()訪問文件夾。

如果要訪問該dll文件,請將dll文件夾移動到src文件夾。並通過

getResourceAsStream("/dll/file.dll") 

檢查this post。這是關於另一個問題,但主要觀點是我想的。

0

如果你想加載它作爲資源,你應該把你的dll文件夾放到源文件夾中。 右擊文件夾上 - >構建路徑 - >用作源文件夾

然後,您可以簡單地加載它是這樣的:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("dll/file.dll"); 
+0

抱歉,但是這個解決方案沒有工作......任何其他想法? – 2012-08-13 10:51:14

0

可能嘗試這樣的事情。

你不需要包含dll,但路徑應該足夠。

System.setProperty( 「的java.library.path」, 「/ DLL」 + File.pathSeparator +
System.getProperty( 「的java.library.path」));

在執行代碼之前添加上面的行。這會將dll路徑添加到jvm運行時庫。

而且它還取決於您從哪裏運行應用程序的文件夾。你需要給dll文件夾一個相對路徑。或者,您可以提供完全限定的路徑,但不建議從項目配置的角度來看。

0

如果你只是想導入它,你總是可以使用系統loadLibrary和nio。路徑是這樣的:

System.loadLibrary(Paths.get("/dll/file.dll").toString()); 

這實際上是一個包裝:

Runtime.getRuntime().loadLibrary(Paths.get("/dll/file.dll").toString()) 
相關問題