multithreading - Java: How to implement a portlistener that doesn't block the rest of the program -


i have main class in define java fx scene , stage, , maincontroller in create database connection , start portlistener. 3 different parts (views, db connection , port listener`) function when tested separately, when uncomment parts can test program in full working, doesn't work.

public class main extends application { maincontroller maincontroller;  @override public void start(stage primarystage) {     borderpane root = new borderpane();     scene scene = new scene(root, 1100, 690);      root.settop(setupmenubar());     root.setcenter(setupcenter());     root.setbottom(setupstatusbar());      scene.getstylesheets().add(getclass().getresource("application.css").toexternalform());     primarystage.setscene(scene);      maincontroller = new maincontroller();     maincontroller.initcontroller(primarystage);      primarystage.show(); } 

the problem never primarystage.show(); of main program because portlistener sits , waits incoming messages seems me there's 1 thread running. (i thought java multi-threaded default)

the portlistener should wait incoming messages, shouldn't block main program functioning. i've changed portlistener implement runnable, read somewhere runnable's run() method should called newly created thread's start() method in class.

now there's problem, i've created startlistening function in portlistener has 2 parameters, portnumber listen to, , maincontroller instance, portlistener can call function in maincontroller once there incoming message. maincontroller has database connection , variables port number, being class comes together.

the portlistener:

public class portlistener implements runnable {     boolean stayconnected = true;     maincontroller maincontroller;     serversocket serversocket;     socket clientsocket = null;      public void startlistening(int portnumber, maincontroller controller) throws ioexception {         maincontroller = controller;         try {             serversocket = new serversocket(portnumber);             serversocket.setreuseaddress(true);         }          catch (ioexception e) {             system.err.println("could not start listener on port: " + portnumber);             return;         }          while(stayconnected) {             run();         }     }      public void run() {         try {             clientsocket = serversocket.accept();             system.out.println("connection established");              bufferedreader in = new bufferedreader(new inputstreamreader(clientsocket.getinputstream()));             string inputline;              while ((inputline = in.readline()) != null) {                 // todo: handle incoming message calling maincontroller                 system.out.println("line incoming: " + inputline);             }             in.close();              clientsocket.close();             serversocket.close();         } catch (ioexception e) {             system.err.println("portlistener run() failed: " + e.getmessage());         }     }      public void stoplistening() {         stayconnected = false;     } } 

i'm missing trivial, there many skilled programmers here, i'd rather ask i'm missing instead of trying hour (or two).


Comments

Popular posts from this blog

c++ - Linked List error when inserting for the last time -

java - activate/deactivate sonar maven plugin by profile? -

tsql - Pivot with Temp Table (definition for column must include data type) -- SQL Server 2008 -