こんにちは、私は構造体のフォームを私はjavaに含める必要があります。 JNA構造StackOverflowError on create
struct usb_relay_device_info {
unsigned char *serial_number;
char *device_path;
usb_relay_device_type type;
usb_relay_device_info* next;};
は、私は私のプロジェクトを実行しようとすると、私はそれをデバッグするとき、私はstackOverwlowError
Exception in thread "main" java.lang.StackOverflowError
at java.util.Hashtable.get(Hashtable.java:363)
at java.util.Properties.getProperty(Properties.java:969)
at java.util.Properties.getProperty(Properties.java:988)
at java.lang.System.getProperty(System.java:756)
at com.sun.jna.Native.getDefaultStringEncoding(Native.java:669)
at com.sun.jna.Native.getStringEncoding(Native.java:662)
at com.sun.jna.Structure.<init>(Structure.java:177)
at com.sun.jna.Structure.<init>(Structure.java:172)
at com.sun.jna.Structure.<init>(Structure.java:159)
at com.sun.jna.Structure.<init>(Structure.java:151)
at relay.RelayInfo.<init>(RelayInfo.java:11)
at sun.reflect.GeneratedConstructorAccessor1.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at com.sun.jna.Structure.newInstance(Structure.java:1773)
at com.sun.jna.Structure.newInstance(Structure.java:1759)
at com.sun.jna.Structure.size(Structure.java:1030)
at com.sun.jna.Native.getNativeSize(Native.java:1172)
at com.sun.jna.Structure.getNativeSize(Structure.java:2072)
at com.sun.jna.Structure.getNativeSize(Structure.java:2062)
at com.sun.jna.Structure.validateField(Structure.java:1105)
at com.sun.jna.Structure.validateFields(Structure.java:1119)
at com.sun.jna.Structure.<init>(Structure.java:179)
at com.sun.jna.Structure.<init>(Structure.java:172)
at com.sun.jna.Structure.<init>(Structure.java:159)
at com.sun.jna.Structure.<init>(Structure.java:151)
at relay.RelayInfo.<init>(RelayInfo.java:11)
at sun.reflect.GeneratedConstructorAccessor1.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
を取得するJavaクラス
public class RelayInfo extends Structure {
public String device_path;
public RelayInfo next;
public byte[] serial_number;
public RelayType type;
@Override
protected List getFieldOrder() {
return Arrays.asList("device_path", "next", "serial_number", "type");
}}
を作成する方法threw'java.lang.StrackOverflowError氏は述べています'例外。 relay.RelayInfo.toString()を評価できません
しかし、私はtoStringを上書きする必要はありませんか?
何が間違っていますか?誰かアイデア? ありがとうございました
あなたのフィールドはあなたのC構造体に比べて間違っていますか? Java構造体のフィールド順序が '' serial_number ''、 'device_path'、 'type'、 'next' 'であるべきではありませんか? – cubrr
はすでに変更されています。今度はいつも得ます lang.IllegalArgumentException:クラスrelay.RelayInfo、フィールド名 'type'(インタフェースrelay.RelayType)のクラス構造体が無効です:タイプ "relay.RelayType"はサポートされていません。タイプ "relay"のネイティブサイズ。relayTypeは」 – Alessandra