You should not create a new MainApp inside your controller.
You already have an application instance created for you when the JavaFX application is launched, you should reuse that (or better yet, make the controller self-sufficient and independent of the application using it).
You should not create a new EventHandlerController.
You already have a controller created for you when you load an FXML file.
I'd advise moving all of the midi related stuff out of the Application.
Try to make you classes follow the Single Resposibility Principle
https://en.wikipedia.org/wiki/Single_responsibility_principle of SOLID
https://en.wikipedia.org/wiki/SOLID_(object-oriented_design).
The application should just implement only the Application interface of co-ordinating initializing, starting and stopping of the application and load up and display of the initial scene.
Also it is weird that your application would both implement Receiver and have a Receiver member variable.
Instead what you should do is use more of an MVC style design, where the application creates the model and the loads up the FXML view (during the process of which the FXMLLoader implicitly creates the controller and links it to the view). What the FXMLLoader won't do is wire in your model objects, to do that, you can review various options in the answer to this question:
http://stackoverflow.com/questions/14187963/passing-parameters-javafx-fxml. MVC is more of a guideline than a strict rule, without knowing your domain it is a little difficult to know if the receivers should be disconnected from your controllers and part of the model or not. For instance you could have your controller implement the receiver interface if the receiver instance should be tightly coupled to an instance of a UI represented by a controller instance. If you need a more flexible design where the receiver is a seperate object which multiple controllers need to interact with, then you could shift it to be part of model which is inserted into controls either via dependency injection (e.g. gluon ignite
http://gluonhq.com/open-source/ignite/) or by calling a method on the controller:
You should understand concurrency in JavaFX
https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm
You should not perform I/O on the JavaFX application thread, instead you should use a Task
https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Task.html for that.
You should not have another thread such as a callback from a midi system modify the JavaFX scene graph, instead you should use Platform.runLater for that.
Don't catch exceptions and then log them without a stack trace otherwise you lose useful debugging info, e.g. instead of
write
Also, it is extremely rare that you would want to swallow an error without at least reporting it, e.g. don't write:
Things will just go wrong and you will never know.
It looks like you call donkey explicitly. That being the case, you don't need to (and should not) annotate it with @FXML. The @FXML won't actually do anything in such a case, it will just confuse somebody reading the program. @FXML is supposed to be a signal to the FXML loader that the a member variable should be injected into an FXML controller or a method should be wired to service an event handler referenced in FXML, neither of which seems to be the case with donkey.
There may be other issues with your code, they were just some things which came to mind.
//end of the world// nice comment :-)