I’m trying to make an app where I have 3 classes. A Controlller (Main Class), SerialHandler and MainWindow which is a JFrame Form created with the NetBeans Gui Builder.
public class Controller {
SerialHandler serialHandler;
MainWindow mainWindow;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Controller controller = new Controller();
controller.initializeSystem(controller);
}
public void initializeSystem(Controller _controller){
mainWindow = new MainWindow(_controller);
mainWindow.setVisible(true);
}
public void anotherMethod(){
mainWindow.setMyLabelText("Hello");
}
}
So the problem is that if I doit like that and an event from the SerialHandler class calls anotherMethod(), the setMyLabelText method doesn’t work but if I called it from the initializeSystem(); it works.
Now if I declare the mainwindow inside the main then the mainWindow instance is not visible from the anotherMethod().
If I declare the mainWindow object outside the main and try to use its method from main context I can’t because the mainWindow object have been declared outside the non-static context.
Could anyone help me or at least point me in the right direction?
Thanks!
There is a design inconsistency with your code:
You are creating the controller that you are passing as an argument to its
initializeSystemwhich is superfluous as you could just usethisinsideinitializeSystem.You should do this instead:
The second inconsistency is the method
anotherMethodwhich accesses your UI and updates stuff in it. You should leave that to the controller instead. Something like this:Now, the
SerialHandlercan update the UI via the Controller when it needs to. All what you have to do is to pass in theControllerreference to theSerialHandlerEDIT Note that I used the
SwingUtilities.invokeLaterto update the UI, this will ensure theControllerwill correctly update the UI even in multithreaded scenarios which I assume is your case