首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

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

2013-08-01 
JNA,回调函数实现中莫名其妙的问题,大家给看看吧写的程序如下:public class Test1 {public static void ma

JNA,回调函数实现中莫名其妙的问题,大家给看看吧
写的程序如下:

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)不能够触发了,但不知道何原因造成的?估请教大家。。。。

热点排行