我用 C 编写了一个 DLL。第一个函数发送一个回调函数的指针,当新数据可用时调用该指针。
所以我使用 JNA 来包装这个函数。
为了避免应用程序结束,我使用 InputStreamReader 来等待来自标准输入的数据。当有新数据可用时,将调用回调并在控制台中打印数据。
但是,如果我在关闭窗口之前使用 JFrame 来避免程序结束,它就不能正常工作。事实上,如果我不调整 JFrame 窗口的大小,回调会被调用大约 30 次,之后什么也没有(即使有新数据可用)。如果我调整窗口大小,则如果从未调用过回调(即使有新数据可用)。
请问你能帮帮我吗?
谢谢
编辑:这是我的主要方法。
包jsigmausblib;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import javax.swing.JFrame;
public class JSigmaUSBLib {
public static void main(String[] args) {
NativeSigmaUSBLibInterface nsuli = (NativeSigmaUSBLibInterface) Native.loadLibrary("SigmaUSBLib1.0", NativeSigmaUSBLibInterface.class);
ReadCallback rc = new ReadCallback() {
@Override
public void callbackFunction(Pointer readData, byte len) {
System.out.println("ok"+readData.getByte(0));
}
};
SigmaUSBLibConfigStruct.ByValue config = new SigmaUSBLibConfigStruct.ByValue();
nsuli.SigmaUSBLibInit(rc , config);
JFrame frame = new JFrame("Debug");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(80, 60);
frame.setVisible(true);
}
}