gpt4 book ai didi

Java GPIO 解构函数

转载 作者:行者123 更新时间:2023-12-01 18:16:28 24 4
gpt4 key购买 nike

我对编程世界非常陌生。所以这是我的问题:

我正在构建一个简单的 IRCBot (PIRCBot),它可以接收诸如 Turn onTurn off 之类的命令,这会将树莓派的引脚设置为 high 。当我终止应用程序或崩溃时,引脚将保持 Activity

所以我的问题是:当我使用 SIGINT 终止应用程序时,如何确保 GPIO 被释放?(通过以下评论解决)

当我的应用程序崩溃时,如何确保 GPIO 被释放?

我的代码主机器人:

    public static void main(String[] args) throws Exception {
try(IRCBot bot = new IRCBot()) {
bot.setVerbose(true);
bot.connect("192.168.1.137", 6667, "somesecretpasswd");
bot.joinChannel("#test");

} catch (Exception e) {
System.out.println(e);
}
}
}

IRCBot 类:

public class IRCBot extends PircBot implements AutoCloseable {
private final static String[] ALLOWED_USER = {"USER1", "USER2", "IRCBot"};
private final static String TURN_LIGHT_ON = "Turn on";
private final static String TURN_LIGHT_OFF = "Turn off";
private final static String DISCO = "Disco";
private GPIOController gpio;

public IRCBot() {
this.gpio = new GPIOController();
this.setName("IRCBot");
}
///other stuff
@Override
public void close() throws Exception {
gpio.close();
}

GPIO Controller 类

public class GPIOController implements AutoCloseable {
private final GpioController gpio = GpioFactory.getInstance();
private GpioPinDigitalOutput gpio20;
private GpioPinDigitalOutput gpio21;
private GpioPinDigitalOutput gpio26;
private boolean status = false;

Logger LOGGER = Logger.getLogger(GPIOController.class.getName());

public GPIOController() {
GpioFactory.setDefaultProvider(new RaspiGpioProvider(RaspiPinNumberingScheme.BROADCOM_PIN_NUMBERING));
gpio.setShutdownOptions(true, PinState.LOW, PinPullResistance.OFF);
gpio20 = gpio.provisionDigitalOutputPin(RaspiBcmPin.GPIO_20, "LED", PinState.HIGH);
gpio21 = gpio.provisionDigitalOutputPin(RaspiBcmPin.GPIO_21, "LED", PinState.HIGH);
gpio26 = gpio.provisionDigitalOutputPin(RaspiBcmPin.GPIO_26, "LED", PinState.HIGH);
}
///some other stuff

@Override
public void close() throws Exception {
gpio.shutdown();
LOGGER.info("Shuting down");
}

最佳答案

如果你让你的类继承 java.lang.AutoCloseable 接口(interface)并在 close 方法中添加你的清理代码,你可以像这样使用它:

try(MyClassThatNeedsCleanup x = new MyClassThatNeedsCleanup()){
// use the class here
}

退出作用域时,这将自动调用 close()。

关于Java GPIO 解构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60354103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com