使用FileInputStream的GPIO输入的Java读取循环

使用FileInputStream的GPIO输入的Java读取循环,java,multithreading,io,gpio,fileinputstream,Java,Multithreading,Io,Gpio,Fileinputstream,我正在为GPIO驱动的字符单元LCD开发一个用户界面。我目前可以将文本写入屏幕,使用发送到GPIO的FileOutputStreams没有问题(这不在pi上;我不会使用pi4j GPIO库) 下一步是读取输入(比如说两个按钮)。以下是我如何向GPIOs写信: public boolean setGP() { try (FileOutputStream out = new FileOutputStream(GPIO_X)) { out.write(VALUE_ON);

我正在为GPIO驱动的字符单元LCD开发一个用户界面。我目前可以将文本写入屏幕,使用发送到GPIO的FileOutputStreams没有问题(这不在pi上;我不会使用pi4j GPIO库)

下一步是读取输入(比如说两个按钮)。以下是我如何向GPIOs写信:

public boolean setGP() {
    try (FileOutputStream out = new FileOutputStream(GPIO_X)) {
        out.write(VALUE_ON);
        out.flush();
        return true;
    } catch(Exception | Error e) {
        System.out.println("Failed to Set " + e);
        return false;
    }
}
我现在想做的是为GPIO输入编写一个读循环,但我不熟悉创建一个while(true)循环,从fileInputStream中查找高值。我有一个用于读取GPIO的函数,但它只是一个用于检查值的函数:

public int readPin(int n){
        try{
            FileInputStream in = new FileInputStream("/sys/class/gpio" + n + "/value");
            int i = in.read();
            in.close();
            return i==30 ? 0 : 1;
        }catch (FileNotFoundException e){
            e.printStackTrace();
            return -1;
        }catch (IOException e)
        {
            e.printStackTrace();
            return -1;
        }
    }
我可以循环读这样的书吗?难道我不想要某种线程。睡眠(100)不会在这里以闪电般的速度无限循环,因为一个可能永远不会出现的按钮按下

public void tryRead(int n) {
        try {
            while(true) {
                FileInputStream in = new FileInputStream("/sys/class/gpio" + n + "/value");
                int i = in.read();
                in.close();
                if(i==30) {
                    //Register a button click
                }else {
                    //do nothing
                }
            }
        }catch(Error|Exception e) {
            
        }
    }
 

只要在底部的无限循环中寻找建议或错误,它运行得很快,没有任何用处,而不是等待一个高值。

在上次读取循环中,我放入了完整的读取代码,但我只使用readPin函数