JNAJava-回调仅在没有Jframe时工作
我已经用C编写了一个DLL。第一个函数发送一个回调函数指针,当新数据可用时调用该回调函数 所以我使用JNA来包装这个函数 为了避免应用程序结束,我使用了一个InputStreamReader来等待来自标准输入的数据。当新数据可用时,调用回调并在控制台中打印数据 但是,如果我在关闭窗口之前使用JFrame来避免程序结束,它将无法正常工作。事实上,如果我不调整JFrame窗口的大小,回调会被调用大约30次,之后即使有新数据也不会调用。如果调整窗口大小,即使有新数据可用,也不会调用回调函数 你能帮我吗 谢谢 编辑:这是我的主要方法JNAJava-回调仅在没有Jframe时工作,java,swing,callback,jframe,jna,Java,Swing,Callback,Jframe,Jna,我已经用C编写了一个DLL。第一个函数发送一个回调函数指针,当新数据可用时调用该回调函数 所以我使用JNA来包装这个函数 为了避免应用程序结束,我使用了一个InputStreamReader来等待来自标准输入的数据。当新数据可用时,调用回调并在控制台中打印数据 但是,如果我在关闭窗口之前使用JFrame来避免程序结束,它将无法正常工作。事实上,如果我不调整JFrame窗口的大小,回调会被调用大约30次,之后即使有新数据也不会调用。如果调整窗口大小,即使有新数据可用,也不会调用回调函数 你能帮我吗
根据你上面的描述,我很难看出哪里出了问题。我想怀疑这是一个Swing线程错误,您的应用程序以某种方式占用了EDT或Swing事件线程,但再一次,根据您目前告诉我的内容,我无法判断。考虑更多的讲述和展示。你又是如何实现这些的呢?同样,您的代码是否遵守Swing线程规则?您需要什么样的详细信息?很难说。我们需要知道足够的信息来帮助您解决问题,比如如何将流阅读器与Swing代码集成。假设你是我们,一个你完全不熟悉其代码的人问你同样的问题。站在我们的立场上,你会让他向你展示什么呢?我已经添加了我的主要方法来解决JFrame的问题。 package 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);
}
}