1

我用 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); } }

4

0 回答 0