java - Cannot get elements from Vector from other class (Thread) -


i have class (my server start class), here create every new client new thread him. after thread createt, add him vector (list) keep track of active users , connections, can send messages specific user. cant access vector-list thread (its class below). can explain me, how can this? have private list , public setter , getter methods size 1 vector. testet it, if connect more 1 client there multiple threads different socket creates. can add entrys vector if manuel in server start class.

package securemessageserver;  public class securemessageserver {  private vector<securemessageserverclientthread> userlist = new vector(); private sslserversocket sslserversocket; int port = 9999; private boolean isrunning=true; sslsocket sslsocket;  private synchronized void loadcertificat(){     try {         url url = this.getclass().getresource("/securemessageserver/keystore.jks");         file file = new file(url.touri());         system.setproperty("javax.net.ssl.keystore", "c:/keystore.jks");         system.setproperty("javax.net.ssl.keystorepassword", "schelkan1994");         //system.setproperty("javax.net.debug","all");         system.out.println("certifikat geladen");     } catch (urisyntaxexception ex) {         logger.getlogger(securemessageserver.class.getname()).log(level.severe, null, ex);;         stopserver();     } }  private synchronized void createsocket(){     try {         sslserversocketfactory sslserversocketfactory = (sslserversocketfactory) sslserversocketfactory.getdefault();             sslserversocket = (sslserversocket) sslserversocketfactory.createserversocket(port);         system.out.println("socket erstellt mit "+port);     } catch (ioexception ex) {         logger.getlogger(securemessageserver.class.getname()).log(level.severe, null, ex);         stopserver();     } }  private synchronized void startserver(sslserversocket sslserversocket){     while(isrunning){         try {             system.out.println("akzeptiere verbindungen");             sslsocket = (sslsocket) sslserversocket.accept();             securemessageserverclientthread client = new securemessageserverclientthread(sslsocket);             startnewclient(client);             userlist.add(client);         } catch (ioexception ex) {             logger.getlogger(securemessageserver.class.getname()).log(level.severe, null, ex);             stopserver();         }     } }  public synchronized void startnewclient(securemessageserverclientthread th){     new thread(th).start(); }  public synchronized void stopserver(){     isrunning=false; }  public synchronized sslserversocket getserversocket(){     if(sslserversocket!=null){         return this.sslserversocket;     }     return null; }  public synchronized void addthreadtolist(securemessageserverclientthread thread){     userlist.add(thread); }  public synchronized void getallthreadfromlist(){         system.out.println("size: "+userlist.size()); }  public synchronized string getusername(){     return userlist.get(0).getuserofthread(); }  public synchronized void deletethreadfromlist(securemessageserverclientthread thread){     userlist.remove(thread); }  public synchronized void getusernameofallthreads(){     for(int i=0;userlist.size()>i;i++){         system.out.println(userlist.get(i).getuserofthread());     } }  public static void main(string[] args){      securemessageserver server = new securemessageserver();      server.loadcertificat();      server.createsocket();      server.startserver(server.sslserversocket); } 

}

and hier ist other class (my thread class) instanze of class if createt if new client connect keep track of connection , perform input , output operations. dont right value vector in other class ... see error? help

public class securemessageserverclientthread implements runnable{  private sslsocket socket; private string username; boolean isrunning=true;  securemessageserver server = new securemessageserver();  public securemessageserverclientthread(sslsocket socket){     this.socket=socket; }  private objectinputstream sinput; private objectoutputstream soutput;  @override public void run() {     system.out.println("client mit socket running: "+socket);     while(isrunning){     try {         sinput  = new objectinputstream(socket.getinputstream());         securemessageserverclientmessage msg = (securemessageserverclientmessage) sinput.readobject();         if(msg.gettype()==0){             system.out.println("all threads:");             server.getallthreadfromlist();         }else if(msg.gettype()==1){             system.out.println(msg.getmessage());         }else if(msg.gettype()==2){             thread.sleep(1000);             socket.close();             this.stopthread();         }else{             system.out.println("unbekannter nachrichtentyp");         }     } catch (ioexception ex) {         logger.getlogger(securemessageserverclientthread.class.getname()).log(level.severe, null, ex);     }   catch (classnotfoundexception ex) {             logger.getlogger(securemessageserverclientthread.class.getname()).log(level.severe, null, ex);         } catch (interruptedexception ex) {             logger.getlogger(securemessageserverclientthread.class.getname()).log(level.severe, null, ex);         }     } }  public void stopthread(){     isrunning=false;    //                 soutput = new objectoutputstream(socket.getoutputstream()); }  public string getuserofthread(){     return this.username; }  public void getuserlist(){     server.getallthreadfromlist(); } 

}

in securemessageserverclientthread, create new server instance securemessageserver server = new securemessageserver();.

this means when call server.getallthreadfromlist() in getuserlist, you're getting list server created has no clients.

the client thread should instead take server instance parameter:

securemessageserver server;  public securemessageserverclientthread(sslsocket socket, securemessageserver server){     this.socket=socket;     this.server=server; } 

and in server, should pass this new client instance:

securemessageserverclientthread client = new securemessageserverclientthread(sslsocket, this); 

Comments

Popular posts from this blog

python - No exponential form of the z-axis in matplotlib-3D-plots -

php - Best Light server (Linux + Web server + Database) for Raspberry Pi -

c# - "Newtonsoft.Json.JsonSerializationException unable to find constructor to use for types" error when deserializing class -