java.lang.IllegalArgumentException怎么解决?

jinling4388 2009-12-30 03:50:32
错误信息如下:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Unsupported argument type com.synjones.angel.CardData at parameter 2 of function Syn_ReadMsg
at com.sun.jna.Function.convertArgument(Function.java:552)
at com.sun.jna.Function.invoke(Function.java:258)
at com.sun.jna.Library$Handler.invoke(Library.java:216)
at $Proxy0.Syn_ReadMsg(Unknown Source)
at com.synjones.angel.TestDlg.actionPerformed(TestDlg.java:302)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

出错函数原型:public int Syn_ReadMsg(int iPort, int iIfOpen, CardData pINCardData);
调用如下:SynIDCardAPI.INSTANCE.Syn_ReadMsg(0, 0, idcardData);//idcardData为CardData
导入的DLL语句:SynIDCardAPI INSTANCE = (SynIDCardAPI)Native.loadLibrary("E:\\SynIDCardAPI", SynIDCardAPI.class);
DLL中C++声明:int _stdcall Syn_ReadMsg( int iPort,int iIfOpen,IDCardData *pIDCardData );
...全文
18268 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinling4388 2011-12-02
  • 打赏
  • 举报
回复
保存数据的类结构public class CardData 忘了继承Structure。写成
public class CardData entend Structure{
}
Smart_Vnote 2011-12-01
  • 打赏
  • 举报
回复
我也头晕啊
JavaAlpha 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jinling4388 的回复:]
没有值为2的参数。是第三个参数我写错了吗?要怎么改?为什么错了?
[/Quote]

加个断点看一下 在看一下 API的说明就知道你错误在那里了 试试看看
JavaAlpha 2009-12-31
  • 打赏
  • 举报
回复
在异常的地方 加个断点跟 一下看看

jinling4388 2009-12-31
  • 打赏
  • 举报
回复
没有值为2的参数。是第三个参数我写错了吗?要怎么改?为什么错了?
lyj8808208 2009-12-31
  • 打赏
  • 举报
回复
传的参数不匹配!!!!!!!
bayougeng 2009-12-31
  • 打赏
  • 举报
回复
Unsupported argument type com.synjones.angel.CardData at parameter 2 of function Syn_ReadMsg
不是第二个参数,应该是值为2的参数。
jinling4388 2009-12-31
  • 打赏
  • 举报
回复
CardData类型在C中的定义:
typedef struct tagIDCardData{
char Name[32];
char Sex[6];
char Nation[20];
char Born[18];
char Address[72];
char IDCardNo[38];
char GrantDept[32];
char UserLifeBegin[18];
char UserLifeEnd[18];
char reserved[38];
char PhotoFileName[255];
}IDCardData;

下面是我在Java中的定义:
public class CardData {
public byte[] name;
public byte[] sex;
public byte[] nation;
public byte[] born;
public byte[] address;
public byte[] idCardNo;
public byte[] grantDept;
public byte[] userLifeBegin;
public byte[] userLifeEnd;
public byte[] reserved;
public byte[] photoFileName;

public CardData(){
name=new byte[32];
sex=new byte[6];
nation=new byte[20];
born=new byte[18];
address=new byte[72];
idCardNo=new byte[38];
grantDept=new byte[32];
userLifeBegin=new byte[18];
userLifeEnd=new byte[18];
reserved=new byte[38];
photoFileName=new byte[255];
}
}

这样有问题吗?
jinling4388 2009-12-31
  • 打赏
  • 举报
回复
这个问题是说我的CardData中第二个参数有问题是吗?
Syn_ReadMsg在TestDlg.java中,而CardData在CardData中。
深山老叔 2009-12-31
  • 打赏
  • 举报
回复
应该是第三个参数的问题吧,多修改下试试。
jinling4388 2009-12-31
  • 打赏
  • 举报
回复
多谢大家了,我都没有用过Java。我改改看看,解决了马上给分。有问题我再来问
jinling4388 2009-12-31
  • 打赏
  • 举报
回复
我把第三个参数改成NULL就可以执行到函数内部了,但是我需要第三个参数保存一些信息。大家帮帮忙呀!

我把类名改成和C中一样的IDCardData,问题还是出现。有知道这是为什么的吗?
jinling4388 2009-12-31
  • 打赏
  • 举报
回复
我确定是这个函数错了,我也知道是第三个参数出错。但是我不知道怎么改。

大家看一下我的C的structure,Java那么写不对吗?
jinling4388 2009-12-31
  • 打赏
  • 举报
回复
加了,但是是C的DLL函数,根本跟踪不进去
Josh 2009-12-31
  • 打赏
  • 举报
回复
看一下传入的参数的类型是否正确 估计是传入的类型不对
TzSword 2009-12-31
  • 打赏
  • 举报
回复
楼主你确定是这个函数调用出错嘛???
是否是别的呢?
TzSword 2009-12-31
  • 打赏
  • 举报
回复
此函数的构造如下
int Syn_ReadMsg(int a, int b, IDCardData c)
ccinBJ 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jinling4388 的回复:]
第二个参数是int类型的,传入的是0,为什么还会报错呢?
[/Quote]
显然说的是第三个参数,int型怎么会非法类型异常呢?建议楼主好好学习一下jni里面对象类型的参数传递问题。
牛叔 2009-12-30
  • 打赏
  • 举报
回复
改参数
多调试
crazylaa 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jinling4388 的回复:]
那是说我函数第二个参数不正确吗?还是第三个?
[/Quote]
可能是第3个,你把第3个的参数改为null,看看怎么说?
加载更多回复(6)

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧