Java: как получить доступ к методам класса, которые также обрабатывают инициализации gpio, не создавая несколько экземпляров - PullRequest
1 голос
/ 24 июня 2019

Итак, мой проект - это приложение 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;
        //

    }

}
...