Я пытаюсь создать приложение, в котором таймер запускается при нажатии определенной клавиши на моем DJ MIDI-контроллере.
Для этого я реализовал класс Receiver следующим образом:
public class MidiInputReceiver implements Receiver {
public String name;
public static ArrayList<byte[]> midiMessageArrayList = new ArrayList<>();
public String deckA = "";
public String deckB = "";
boolean checkFirstTime = true;
public MidiInputReceiver(String name) {
this.name = name;
}
@Override
public void send(MidiMessage msg, long timeStamp) {
if (checkFirstTime == true) {
Properties mainProperties = new Properties();
FileInputStream fileInStream;
String path = "./properties/midi_keys.properties";
try {
File file = new File("./properties/midi_keys.properties");
if (file.exists() == true) {
fileInStream = new FileInputStream(file);
mainProperties.load(fileInStream);
fileInStream.close();
deckA = mainProperties.getProperty("KEY_A_DECK");
deckB = mainProperties.getProperty("KEY_B_DECK");
checkFirstTime = false;
}
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
ex.printStackTrace();
}
}
byte[] aMsg = msg.getMessage();
midiMessageArrayList.add(aMsg);
if (!deckA.equals("") && !deckB.equals("")) {
int msgKey = aMsg[1];
int msgAction = aMsg[2];
if(msgKey == Integer.parseInt(deckA) && msgAction == 127) {
MainFXMLController.HandleTimer();
}
}
}
public static ArrayList getArrayMessage() {
return midiMessageArrayList;
}
@Override
public void close() {}
}
Но когда я пытаюсь вызвать метод HandleTimer (), который находится в классе MainFXMLController (класс, который управляет основным графическим интерфейсом и таймером), я получаю сообщение об ошибке, потому что «нестатический метод HandleTimer () не можетбыть ссылкой из статического контекста ".
Можно ли каким-либо образом вызвать метод HandleTimer () и запустить таймер, не создавая новый экземпляр класса MainFXMLController?
Спасибо всем заранее!