JNA,回调函数实现中莫名其妙的问题,大家给看看吧

sdudubing 2013-07-21 11:59:10
写的程序如下:
public class Test1 {	
public static void main(String[] args){
if (CLibrary.INSTANCE.Init((ByReference)null,new StatusCallBack1(),6010)){
System.out.println("初始化成功1");
}
MyThread mytd= new MyThread();
Thread demo=new Thread(mytd);
demo.start();
}
}

其中:
public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary)Native.loadLibrary("IOCP_DLL",CLibrary.class);
void ShutDown();
boolean Init(ByReference pthis,StatusCallBack pcallback,int port);
void CloseClient(int sockClient);
int GetBufferLen(int sockClient);
void MoveBuffer(int sockClient,Pointer str,int num);
}

public interface StatusCallBack extends Callback {
void invoke(int sockClient,int code);
}
class StatusCallBack1 implements StatusCallBack {
int long1=0;
public static String toStringEveryByte(byte b) {
int num1, num2;
char char1, char2;
String tostring = "";
num1 = (b & 0xf0) >> 4;
num2 = (b & 0x0f);
char1 = t2s(num1);
char2 = t2s(num2);
tostring += char1;
tostring += char2;
return tostring;
}
public static char t2s(int tennum) {
char c[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
byte b;
b = (byte) tennum;
return (c[b & 0x0f]);
}
public static int s2t(String s_string) {
return Integer.parseInt(s_string.trim(), 16);
}

public void invoke(int sockClient, int code)
{
if (code==1)
{
System.out.println(sockClient + "终端连入");
}
else if (code==2)
{
System.out.println(sockClient +"终端断开");
}
else if (code==4)
{
int long1=0;
ByteBuffer bb = ByteBuffer.allocate(100);
Memory mymem1 = new Memory(100);
long1=CLibrary.INSTANCE.GetBufferLen(sockClient);
System.out.println("数据上送"+long1);
CLibrary.INSTANCE.MoveBuffer(sockClient, mymem1, long1);
byte[] mmm = new byte[long1];
mymem1.read(0, mmm, 0, long1);
mymem1.clear();
bb.put(mmm);
int modbit=0;
if (long1 % 17 == 0) {
modbit = 17;
}
String data_mark = toStringEveryByte(bb.array()[0])
+ toStringEveryByte(bb.array()[1])
+ toStringEveryByte(bb.array()[2])
+ toStringEveryByte(bb.array()[3]);
System.out.println("数据内容"+data_mark+"读写器ID:");
}
}
}


通过测试,开始能运行一段时间,但是在输出10多条数据后就不再运行了,也就是函数public void invoke(int sockClient, int code)不能够触发了,但不知道何原因造成的?估请教大家。。。。
...全文
576 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssxtm 2014-07-07
  • 打赏
  • 举报
回复
引用 2 楼 sdudubing 的回复:
[quote=引用 1 楼 shadowsick 的回复:]
有个回帖的了,我将new StatusCallBack1()改为static就好了。[/quote] 我也是回调函数不能执行,你这里是指将StatusCallBack1类的定义成static 还是怎么做的?
xujiaweiDaShen 2013-11-13
  • 打赏
  • 举报
回复
主要是发私信需要两个人都加关注
xujiaweiDaShen 2013-11-13
  • 打赏
  • 举报
回复
兄弟,我现在刚接触JNA,看你也在用,能加下关注吗?希望你能指导我一下
sdudubing 2013-07-22
  • 打赏
  • 举报
回复
引用 1 楼 shadowsick 的回复:
有个回帖的了,我将new StatusCallBack1()改为static就好了。
小丑哥_V5 2013-07-22
  • 打赏
  • 举报
回复

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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