make a javafx graphic interface show and hide by sending commands through a socket












0















Right now the solution I have is having a queue, and when something comes through the socket putting it the queue and then call stage.hide() or stage.show() depending what it is. But i´m having problem with the implementation. I have something like this:



private BlockingQueue<String> requests; 
private Stage primaryStage;

public GraficInterface() {
requests = new LinkedBlockingQueue<String>();
}

@Override
public void start(Stage sp) {
try {
this.primaryStage = sp;
Parent root = FXMLLoader.load(getClass().getResource(...));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.sizeToScene();
primaryStage.show();

} catch(Exception e) {
e.printStackTrace();
}
}

@Override
public void run() {
Thread stopper = new Thread(new Runnable() {
public void run() {
String message;
while (true) {
try {
message = requests.take();
if (message.equalsIgnoreCase("show")) {
primaryStage.show();
} else if (message.equalsIgnoreCase("hide")) {
primaryStage.hide();
}
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}
});
stopper.start();

launch();
}


public void addToGraficThread(String string) {
try {
this.requests.put(string);
} catch (InterruptedException e) {
e.printStackTrace();
}
}


Things are working fine with the queue but I´m getting java.lang.NullPointerException when I do primaryStage.show() or primaryStage.hide()



What I´m trying to do it´s possible? Is there another way?










share|improve this question























  • You create another instance of your Application class when calling Application.launch. In addition to this Application.launch is responsible for creating the primary stage and invoking the start method, which means even if you fix the issue mentioned before, cannot be sure the field has been set from the start method (in addition to not ensuring the new field value will eventually be available to the thread and modifying the GUI from a background thread).

    – fabian
    Nov 22 '18 at 20:36











  • mmmm, so this is not posible? could I Platform.exit() and then launch it again?

    – daniel gon
    Nov 23 '18 at 13:59











  • The Application class is the entry point of a javafx app, not just responsible for a single window. Many of your issues could be resolved by simply using the start method to start to launch a thread starting/handling the socket connection. I recommend using a Task<Boolean> though, since it provides functionality for doing updates of it's value property on the JavaFX application thread. Exiting and relaunching won't work btw.

    – fabian
    Nov 23 '18 at 14:06
















0















Right now the solution I have is having a queue, and when something comes through the socket putting it the queue and then call stage.hide() or stage.show() depending what it is. But i´m having problem with the implementation. I have something like this:



private BlockingQueue<String> requests; 
private Stage primaryStage;

public GraficInterface() {
requests = new LinkedBlockingQueue<String>();
}

@Override
public void start(Stage sp) {
try {
this.primaryStage = sp;
Parent root = FXMLLoader.load(getClass().getResource(...));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.sizeToScene();
primaryStage.show();

} catch(Exception e) {
e.printStackTrace();
}
}

@Override
public void run() {
Thread stopper = new Thread(new Runnable() {
public void run() {
String message;
while (true) {
try {
message = requests.take();
if (message.equalsIgnoreCase("show")) {
primaryStage.show();
} else if (message.equalsIgnoreCase("hide")) {
primaryStage.hide();
}
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}
});
stopper.start();

launch();
}


public void addToGraficThread(String string) {
try {
this.requests.put(string);
} catch (InterruptedException e) {
e.printStackTrace();
}
}


Things are working fine with the queue but I´m getting java.lang.NullPointerException when I do primaryStage.show() or primaryStage.hide()



What I´m trying to do it´s possible? Is there another way?










share|improve this question























  • You create another instance of your Application class when calling Application.launch. In addition to this Application.launch is responsible for creating the primary stage and invoking the start method, which means even if you fix the issue mentioned before, cannot be sure the field has been set from the start method (in addition to not ensuring the new field value will eventually be available to the thread and modifying the GUI from a background thread).

    – fabian
    Nov 22 '18 at 20:36











  • mmmm, so this is not posible? could I Platform.exit() and then launch it again?

    – daniel gon
    Nov 23 '18 at 13:59











  • The Application class is the entry point of a javafx app, not just responsible for a single window. Many of your issues could be resolved by simply using the start method to start to launch a thread starting/handling the socket connection. I recommend using a Task<Boolean> though, since it provides functionality for doing updates of it's value property on the JavaFX application thread. Exiting and relaunching won't work btw.

    – fabian
    Nov 23 '18 at 14:06














0












0








0








Right now the solution I have is having a queue, and when something comes through the socket putting it the queue and then call stage.hide() or stage.show() depending what it is. But i´m having problem with the implementation. I have something like this:



private BlockingQueue<String> requests; 
private Stage primaryStage;

public GraficInterface() {
requests = new LinkedBlockingQueue<String>();
}

@Override
public void start(Stage sp) {
try {
this.primaryStage = sp;
Parent root = FXMLLoader.load(getClass().getResource(...));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.sizeToScene();
primaryStage.show();

} catch(Exception e) {
e.printStackTrace();
}
}

@Override
public void run() {
Thread stopper = new Thread(new Runnable() {
public void run() {
String message;
while (true) {
try {
message = requests.take();
if (message.equalsIgnoreCase("show")) {
primaryStage.show();
} else if (message.equalsIgnoreCase("hide")) {
primaryStage.hide();
}
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}
});
stopper.start();

launch();
}


public void addToGraficThread(String string) {
try {
this.requests.put(string);
} catch (InterruptedException e) {
e.printStackTrace();
}
}


Things are working fine with the queue but I´m getting java.lang.NullPointerException when I do primaryStage.show() or primaryStage.hide()



What I´m trying to do it´s possible? Is there another way?










share|improve this question














Right now the solution I have is having a queue, and when something comes through the socket putting it the queue and then call stage.hide() or stage.show() depending what it is. But i´m having problem with the implementation. I have something like this:



private BlockingQueue<String> requests; 
private Stage primaryStage;

public GraficInterface() {
requests = new LinkedBlockingQueue<String>();
}

@Override
public void start(Stage sp) {
try {
this.primaryStage = sp;
Parent root = FXMLLoader.load(getClass().getResource(...));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.sizeToScene();
primaryStage.show();

} catch(Exception e) {
e.printStackTrace();
}
}

@Override
public void run() {
Thread stopper = new Thread(new Runnable() {
public void run() {
String message;
while (true) {
try {
message = requests.take();
if (message.equalsIgnoreCase("show")) {
primaryStage.show();
} else if (message.equalsIgnoreCase("hide")) {
primaryStage.hide();
}
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}
});
stopper.start();

launch();
}


public void addToGraficThread(String string) {
try {
this.requests.put(string);
} catch (InterruptedException e) {
e.printStackTrace();
}
}


Things are working fine with the queue but I´m getting java.lang.NullPointerException when I do primaryStage.show() or primaryStage.hide()



What I´m trying to do it´s possible? Is there another way?







java javafx






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 22 '18 at 20:19









daniel gondaniel gon

496




496













  • You create another instance of your Application class when calling Application.launch. In addition to this Application.launch is responsible for creating the primary stage and invoking the start method, which means even if you fix the issue mentioned before, cannot be sure the field has been set from the start method (in addition to not ensuring the new field value will eventually be available to the thread and modifying the GUI from a background thread).

    – fabian
    Nov 22 '18 at 20:36











  • mmmm, so this is not posible? could I Platform.exit() and then launch it again?

    – daniel gon
    Nov 23 '18 at 13:59











  • The Application class is the entry point of a javafx app, not just responsible for a single window. Many of your issues could be resolved by simply using the start method to start to launch a thread starting/handling the socket connection. I recommend using a Task<Boolean> though, since it provides functionality for doing updates of it's value property on the JavaFX application thread. Exiting and relaunching won't work btw.

    – fabian
    Nov 23 '18 at 14:06



















  • You create another instance of your Application class when calling Application.launch. In addition to this Application.launch is responsible for creating the primary stage and invoking the start method, which means even if you fix the issue mentioned before, cannot be sure the field has been set from the start method (in addition to not ensuring the new field value will eventually be available to the thread and modifying the GUI from a background thread).

    – fabian
    Nov 22 '18 at 20:36











  • mmmm, so this is not posible? could I Platform.exit() and then launch it again?

    – daniel gon
    Nov 23 '18 at 13:59











  • The Application class is the entry point of a javafx app, not just responsible for a single window. Many of your issues could be resolved by simply using the start method to start to launch a thread starting/handling the socket connection. I recommend using a Task<Boolean> though, since it provides functionality for doing updates of it's value property on the JavaFX application thread. Exiting and relaunching won't work btw.

    – fabian
    Nov 23 '18 at 14:06

















You create another instance of your Application class when calling Application.launch. In addition to this Application.launch is responsible for creating the primary stage and invoking the start method, which means even if you fix the issue mentioned before, cannot be sure the field has been set from the start method (in addition to not ensuring the new field value will eventually be available to the thread and modifying the GUI from a background thread).

– fabian
Nov 22 '18 at 20:36





You create another instance of your Application class when calling Application.launch. In addition to this Application.launch is responsible for creating the primary stage and invoking the start method, which means even if you fix the issue mentioned before, cannot be sure the field has been set from the start method (in addition to not ensuring the new field value will eventually be available to the thread and modifying the GUI from a background thread).

– fabian
Nov 22 '18 at 20:36













mmmm, so this is not posible? could I Platform.exit() and then launch it again?

– daniel gon
Nov 23 '18 at 13:59





mmmm, so this is not posible? could I Platform.exit() and then launch it again?

– daniel gon
Nov 23 '18 at 13:59













The Application class is the entry point of a javafx app, not just responsible for a single window. Many of your issues could be resolved by simply using the start method to start to launch a thread starting/handling the socket connection. I recommend using a Task<Boolean> though, since it provides functionality for doing updates of it's value property on the JavaFX application thread. Exiting and relaunching won't work btw.

– fabian
Nov 23 '18 at 14:06





The Application class is the entry point of a javafx app, not just responsible for a single window. Many of your issues could be resolved by simply using the start method to start to launch a thread starting/handling the socket connection. I recommend using a Task<Boolean> though, since it provides functionality for doing updates of it's value property on the JavaFX application thread. Exiting and relaunching won't work btw.

– fabian
Nov 23 '18 at 14:06












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53437583%2fmake-a-javafx-graphic-interface-show-and-hide-by-sending-commands-through-a-sock%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53437583%2fmake-a-javafx-graphic-interface-show-and-hide-by-sending-commands-through-a-sock%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Wiesbaden

Marschland

Dieringhausen