簡體   English   中英

無法使用 JNA:com.sun.jna.Library is not access

[英]Can not use JNA: com.sun.jna.Library is not accessible

I am trying to use JNA, because I want to work with a.dll that was written in c++ and the rest of my code is in Java. 但是,如果我嘗試導入 JNA 類 Eclipse 聲稱“類型 com.sun.jna.Library 不可訪問”。

我的 IDE 似乎看到 JNA 在我的庫中,因為當我鍵入“import com.sun.j”時,它會將.jna 和 .Z68995FCBF432492D40484D04A9D2 文件中的其他包

我創建了一個單獨的項目來查看它是否在那里工作,但它只是不起作用。

I have downloaded the latest.jar (jna-5.8.0.jar and jna-platform-5.8.0.jar) files from the jna Github (https://github.com/java-native-access/jna/blob/ master/README.md ),我已通過項目將它們添加到 class 路徑->配置構建路徑->添加外部 JARs

我將 Eclipse 與 javaSE-13 一起使用。

package Testtest;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }
}

Package 結構:

Test
 |-- src
 |   |-- TestTest
 |   |   |-- Main.java
 |   |-- module-info.java
 |-- JRE System Library [JavaSE-13]
 |-- Referenced Libraries
     |-- jna-5.8.0.jar
     |-- jna-platform-5.8.0.jar

正如評論中提到的@greg-449 ,您有一個模塊化項目,由您的src目錄(包根目錄)中存在module-info.java文件表示。

您在這里有三個選擇:

  • 在忽略module-info.java JRE 8 或更早版本上運行(或將您的項目兼容級別更改為)
  • 刪除module-info.java模塊描述符,以便在沒有模塊的情況下運行程序
  • 編輯您的模塊描述符( module-info.java )以添加指令requires com.sun.jna 如果您使用的是 jna jna-platform ,則還requires com.sun.jna.platform
    • 此外,如果您擴展任何 JNA 類(如StructurePointerType ),您將需要在項目中open包含這些子類到com.sun.jna的任何包,因為它們使用反射來訪問您的子類。 (這里有多個選項,但open TestTest to com.sun.jna是最接近 JDK8 的行為。)。 我知道這只是一個測試設置,但考慮一個反向 DNS 樣式的 package 名稱和模塊描述符。
    • 如果您在模塊路徑上使用 JNA,您可能更喜歡使用jna-jpms-5.8.0jna-platform-jpms-5.8.0 JARs 作為依賴項,因為它們有自己的模塊描述符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM