JavaFX client server socket
I'm setting a mail local service and I've built the server interface with JavaFX.
The problem is that when I run the server, it shows the interface but it's blocked and it doesn't work in any way.
It seems like only the graphics doesn't appear, the backend is working. Indeed if I connect the client and do a request, it all works.
Is it maybe a problem of thread?
This is the main:
FXMLLoader loader = new FXMLLoader(getClass().getResource("MainView.fxml"));
Parent root = loader.load();
stage.setTitle("Server Log");
stage.setScene(new Scene(root, 490, 309));
stage.centerOnScreen();
stage.show();
ServerModel m = new ServerModel(); //create Model
ServerController c = loader.getController(); //get controller
c.setModel(m);
m.start(); //the problem is here, if I comment this line It shows the server interface but obviously the backend doesn't work.
The constructor of ServerModel is this:
public ServerModel() {
try {
serversocket = new ServerSocket(5888);
} catch (IOException e) {
Logger.getLogger(ServerModel.class.getName()).log(Level.SEVERE, null, e);
}
}
and this is the start method of the model that attends the client request for socket:
public void start(){
Socket socket = null;
while (!closed){ //server main loop
try{
socket = serversocket.accept();
//... (here there would be threads that communicate with client and set closed to true)
} catch (IOException e) {
e.printStackTrace();
}
}
}
java javafx
add a comment |
I'm setting a mail local service and I've built the server interface with JavaFX.
The problem is that when I run the server, it shows the interface but it's blocked and it doesn't work in any way.
It seems like only the graphics doesn't appear, the backend is working. Indeed if I connect the client and do a request, it all works.
Is it maybe a problem of thread?
This is the main:
FXMLLoader loader = new FXMLLoader(getClass().getResource("MainView.fxml"));
Parent root = loader.load();
stage.setTitle("Server Log");
stage.setScene(new Scene(root, 490, 309));
stage.centerOnScreen();
stage.show();
ServerModel m = new ServerModel(); //create Model
ServerController c = loader.getController(); //get controller
c.setModel(m);
m.start(); //the problem is here, if I comment this line It shows the server interface but obviously the backend doesn't work.
The constructor of ServerModel is this:
public ServerModel() {
try {
serversocket = new ServerSocket(5888);
} catch (IOException e) {
Logger.getLogger(ServerModel.class.getName()).log(Level.SEVERE, null, e);
}
}
and this is the start method of the model that attends the client request for socket:
public void start(){
Socket socket = null;
while (!closed){ //server main loop
try{
socket = serversocket.accept();
//... (here there would be threads that communicate with client and set closed to true)
} catch (IOException e) {
e.printStackTrace();
}
}
}
java javafx
2
Sounds like you're running the server code on the JavaFX Application Thread. This will block the thread from doing any GUI related stuff; hence why you must never block, nor do long-running tasks on, the FX thread. You should run the server code on a background thread.
– Slaw
Dec 27 '18 at 16:28
@Slaw Ok I got it but I don't know how to do it. Can you show me in this example how to do it? Thanks a lot.
– Filippo
Dec 27 '18 at 16:34
1
These may help: Lesson: Concurrency (Java Tutorials), thejava.util.concurrent
package, Concurrency in JavaFX (JavaFX Tutorials), and thejavafx.concurrent
package.
– Slaw
Dec 27 '18 at 18:28
add a comment |
I'm setting a mail local service and I've built the server interface with JavaFX.
The problem is that when I run the server, it shows the interface but it's blocked and it doesn't work in any way.
It seems like only the graphics doesn't appear, the backend is working. Indeed if I connect the client and do a request, it all works.
Is it maybe a problem of thread?
This is the main:
FXMLLoader loader = new FXMLLoader(getClass().getResource("MainView.fxml"));
Parent root = loader.load();
stage.setTitle("Server Log");
stage.setScene(new Scene(root, 490, 309));
stage.centerOnScreen();
stage.show();
ServerModel m = new ServerModel(); //create Model
ServerController c = loader.getController(); //get controller
c.setModel(m);
m.start(); //the problem is here, if I comment this line It shows the server interface but obviously the backend doesn't work.
The constructor of ServerModel is this:
public ServerModel() {
try {
serversocket = new ServerSocket(5888);
} catch (IOException e) {
Logger.getLogger(ServerModel.class.getName()).log(Level.SEVERE, null, e);
}
}
and this is the start method of the model that attends the client request for socket:
public void start(){
Socket socket = null;
while (!closed){ //server main loop
try{
socket = serversocket.accept();
//... (here there would be threads that communicate with client and set closed to true)
} catch (IOException e) {
e.printStackTrace();
}
}
}
java javafx
I'm setting a mail local service and I've built the server interface with JavaFX.
The problem is that when I run the server, it shows the interface but it's blocked and it doesn't work in any way.
It seems like only the graphics doesn't appear, the backend is working. Indeed if I connect the client and do a request, it all works.
Is it maybe a problem of thread?
This is the main:
FXMLLoader loader = new FXMLLoader(getClass().getResource("MainView.fxml"));
Parent root = loader.load();
stage.setTitle("Server Log");
stage.setScene(new Scene(root, 490, 309));
stage.centerOnScreen();
stage.show();
ServerModel m = new ServerModel(); //create Model
ServerController c = loader.getController(); //get controller
c.setModel(m);
m.start(); //the problem is here, if I comment this line It shows the server interface but obviously the backend doesn't work.
The constructor of ServerModel is this:
public ServerModel() {
try {
serversocket = new ServerSocket(5888);
} catch (IOException e) {
Logger.getLogger(ServerModel.class.getName()).log(Level.SEVERE, null, e);
}
}
and this is the start method of the model that attends the client request for socket:
public void start(){
Socket socket = null;
while (!closed){ //server main loop
try{
socket = serversocket.accept();
//... (here there would be threads that communicate with client and set closed to true)
} catch (IOException e) {
e.printStackTrace();
}
}
}
java javafx
java javafx
edited Dec 27 '18 at 16:29
asked Dec 27 '18 at 16:23
Filippo
63
63
2
Sounds like you're running the server code on the JavaFX Application Thread. This will block the thread from doing any GUI related stuff; hence why you must never block, nor do long-running tasks on, the FX thread. You should run the server code on a background thread.
– Slaw
Dec 27 '18 at 16:28
@Slaw Ok I got it but I don't know how to do it. Can you show me in this example how to do it? Thanks a lot.
– Filippo
Dec 27 '18 at 16:34
1
These may help: Lesson: Concurrency (Java Tutorials), thejava.util.concurrent
package, Concurrency in JavaFX (JavaFX Tutorials), and thejavafx.concurrent
package.
– Slaw
Dec 27 '18 at 18:28
add a comment |
2
Sounds like you're running the server code on the JavaFX Application Thread. This will block the thread from doing any GUI related stuff; hence why you must never block, nor do long-running tasks on, the FX thread. You should run the server code on a background thread.
– Slaw
Dec 27 '18 at 16:28
@Slaw Ok I got it but I don't know how to do it. Can you show me in this example how to do it? Thanks a lot.
– Filippo
Dec 27 '18 at 16:34
1
These may help: Lesson: Concurrency (Java Tutorials), thejava.util.concurrent
package, Concurrency in JavaFX (JavaFX Tutorials), and thejavafx.concurrent
package.
– Slaw
Dec 27 '18 at 18:28
2
2
Sounds like you're running the server code on the JavaFX Application Thread. This will block the thread from doing any GUI related stuff; hence why you must never block, nor do long-running tasks on, the FX thread. You should run the server code on a background thread.
– Slaw
Dec 27 '18 at 16:28
Sounds like you're running the server code on the JavaFX Application Thread. This will block the thread from doing any GUI related stuff; hence why you must never block, nor do long-running tasks on, the FX thread. You should run the server code on a background thread.
– Slaw
Dec 27 '18 at 16:28
@Slaw Ok I got it but I don't know how to do it. Can you show me in this example how to do it? Thanks a lot.
– Filippo
Dec 27 '18 at 16:34
@Slaw Ok I got it but I don't know how to do it. Can you show me in this example how to do it? Thanks a lot.
– Filippo
Dec 27 '18 at 16:34
1
1
These may help: Lesson: Concurrency (Java Tutorials), the
java.util.concurrent
package, Concurrency in JavaFX (JavaFX Tutorials), and the javafx.concurrent
package.– Slaw
Dec 27 '18 at 18:28
These may help: Lesson: Concurrency (Java Tutorials), the
java.util.concurrent
package, Concurrency in JavaFX (JavaFX Tutorials), and the javafx.concurrent
package.– Slaw
Dec 27 '18 at 18:28
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53947989%2fjavafx-client-server-socket%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53947989%2fjavafx-client-server-socket%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
2
Sounds like you're running the server code on the JavaFX Application Thread. This will block the thread from doing any GUI related stuff; hence why you must never block, nor do long-running tasks on, the FX thread. You should run the server code on a background thread.
– Slaw
Dec 27 '18 at 16:28
@Slaw Ok I got it but I don't know how to do it. Can you show me in this example how to do it? Thanks a lot.
– Filippo
Dec 27 '18 at 16:34
1
These may help: Lesson: Concurrency (Java Tutorials), the
java.util.concurrent
package, Concurrency in JavaFX (JavaFX Tutorials), and thejavafx.concurrent
package.– Slaw
Dec 27 '18 at 18:28