繁体   English   中英

如何将Java空参数传递给使用JNA编译为C代码的本机方法?

[英]How to pass a Java null parameter to a native method that uses JNA to compile to C code?

我正在尝试使用包装C库libudevJava库 我需要调用的方法之一addMatchSubsystemDevtype(final String subsystem, final String devtype)具有两个String参数,其中第二个参数必须为null 这里可以看到C代码中的一个示例(ctrl + f null)。 但是,当我尝试在Java中执行此操作时,JNA会抛出NullPointerException ,如此处所示:

Monitor monitor = Monitor.newFromNetlink(udev, "udev");
monitor.addMatchSubsystemDevtype("video4linux", null);

例外:

Exception in thread "main" java.lang.NullPointerException
    at com.sun.jna.Native.getBytes(Native.java:604)
    at com.sun.jna.Native.toByteArray(Native.java:627)
    at com.sun.jna.Native.toByteArray(Native.java:620)
    at org.freedesktop.libudev.jna.StringUtil.asPointer(StringUtil.java:14)
    at org.freedesktop.libudev.Monitor.addMatchSubsystemDevtype(Monitor.java:116)
    at Example.main(Example.java:14)

有什么办法可以从Java向此C方法传递null?

@ user2543253指出这不是JNA问题,而是Java库问题。 我通过简单地添加来解决了这个问题

public int addMatchSubsystem(final String subsystem) {
    return UdevLibrary.INSTANCE().udev_monitor_filter_add_match_subsystem_devtype(
            getPointer(), StringUtil.asPointer(subsystem), null);
}

到库的Monitor类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM