Итак, мой проект - это приложение JavaFX, которое управляет шаговым двигателем, управляемым RaspberryPi с использованием библиотеки Pi4j. Первая версия моей программы была более простой реализацией Java, запущенной через терминал. В v1 у меня было 2 класса: основной и моторный. Инициализация gpio для двигателя была выполнена в классе двигателя и кнопках в основном классе. Чтобы управлять двигателем, я создал экземпляр класса двигателя и доступа с помощью motor.run();
.
В версии 2 я добавляю в программу планировщик, который пытаюсь реализовать с помощью Quartz API, но теперь мне нужно получить доступ к классу двигателя не только из основного, но и из класса расписания. В моем классе расписания я получаю параметры для задания и триггер от основного, и задание имеет значение motor.up()
или motor.down()
. Я не могу получить доступ к нестатическому методу из статического контекста - вот в чем проблема. Если я создам другой экземпляр двигателя в пределах графика, он выдаст ошибки для повторной инициализации выводов gpio.
Я не могу инициализировать gpio в главном классе, потому что тогда у меня возникает та же проблема, связанная с нестатическим и статическим, при запуске методов двигателя с основных узлов.
Если я создаю экземпляр main в расписании и получаю доступ как shade.motor.up()
У меня нет ошибок компиляции, но это кажется неправильным, потому что каждый раз, когда я создаю новую работу, новый экземпляр моего основного графического интерфейса пользователя создано.
Существует ли правильный способ глобальной инициализации GPIO, поэтому мне не нужно беспокоиться о создании нескольких экземпляров класса двигателя.
Я все еще выясняю, как планировать задания, чтобы код был очень неполным, но в основном это псевдокод того, как я хочу его реализовать.
public class Scheduler implements Job {
Autoshade shade = new Autoshade();
int hour;
int minute;
int position;
int target;
String description;
public Scheduler() {
}
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
if (target > position) {
try {
shade.motor.down(target-position);
} catch (InterruptedException ex) {
Logger.getLogger(Scheduler.class.getName()).log(Level.SEVERE, null, ex);
}
} else if (target < position) {
try {
shade.motor.up(position-target);
} catch (InterruptedException ex) {
Logger.getLogger(Scheduler.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public void addJob(int hour, int minute, int position, int target, String description) {
this.hour = hour;
this.minute = minute;
this.position = position;
this.target = target;
this.description = description;
//
}
}