Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JNAJava-回调仅在没有Jframe时工作_Java_Swing_Callback_Jframe_Jna - Fatal编程技术网

JNAJava-回调仅在没有Jframe时工作

JNAJava-回调仅在没有Jframe时工作,java,swing,callback,jframe,jna,Java,Swing,Callback,Jframe,Jna,我已经用C编写了一个DLL。第一个函数发送一个回调函数指针,当新数据可用时调用该回调函数 所以我使用JNA来包装这个函数 为了避免应用程序结束,我使用了一个InputStreamReader来等待来自标准输入的数据。当新数据可用时,调用回调并在控制台中打印数据 但是,如果我在关闭窗口之前使用JFrame来避免程序结束,它将无法正常工作。事实上,如果我不调整JFrame窗口的大小,回调会被调用大约30次,之后即使有新数据也不会调用。如果调整窗口大小,即使有新数据可用,也不会调用回调函数 你能帮我吗

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