gpt4 book ai didi

java - 如何在JNA中制作结构?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:10:13 48 4
gpt4 key购买 nike

当我运行下面的代码时出现这个错误;

Exception in thread "AWT-EventQueue-0" java.lang.Error: Structure.getFieldOrder() on class javaapplication2.NewJFrame$APPBARDATA returns names ([cbSize, hWnd, jCallbackMessage, jEdge, rc, sParam]) which do not match declared field names ([])
at com.sun.jna.Structure.getFields(Structure.java:872)
at com.sun.jna.Structure.deriveLayout(Structure.java:983)
at com.sun.jna.Structure.calculateSize(Structure.java:908)
at com.sun.jna.Structure.calculateSize(Structure.java:896)
at com.sun.jna.Structure.allocateMemory(Structure.java:357)
at com.sun.jna.Structure.<init>(Structure.java:191)
at com.sun.jna.Structure.<init>(Structure.java:180)
at com.sun.jna.Structure.<init>(Structure.java:167)
at com.sun.jna.Structure.<init>(Structure.java:159)
at javaapplication2.NewJFrame$APPBARDATA.<init>(NewJFrame.java:31)
at javaapplication2.NewJFrame.<init>(NewJFrame.java:56)
at javaapplication2.NewJFrame$7.run(NewJFrame.java:255)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

我的类(class):

class APPBARDATA extends Structure {

WinUser.DWORD cbSize;
WinUser.HWND hWnd;
WinUser.UINT_PTR uCallbackMessage;
WinUser.UINT_PTR uEdge;
WinUser.RECT rc;
WinUser.LPARAM lParam;

@Override
protected List getFieldOrder() {
return Arrays.asList(new String[]{"cbSize", "hWnd", "uCallbackMessage", "uEdge", "rc", "lParam"});
}
}

APPBARDATA pdata = new APPBARDATA();
pdata.lParam = new WinUser.LPARAM(0);
pdata.cbSize = new WinUser.DWORD(32);
pdata.hWnd = WinUser.HWND_BROADCAST;

怎么了?

最佳答案

将您的属性标记为公开,因为 as specified in the doc , JNA 使用class.getFields()获取属性列表。

Class.getFields() 的 Javadoc:

Returns an array containing Field objects reflecting all the accessible public fields of the class or interface represented by this Class object. ...

关于java - 如何在JNA中制作结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15050391/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com