vendredi 20 février 2015

Why can't I access data from my static list?



I am trying to access data from my list but it always end up with null or nothing in it. I run my Class Server That have public static ArrayList<String> clientUsernameList = new ArrayList<>(); In the code. If my server accept a socket this code below should occur.



package multi.threaded_server_application;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.time.Clock;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import jdk.nashorn.internal.codegen.CompilerConstants;

/**
*
* @author Seeya
*/
public class Server {

public static ArrayList<String> clientUsernameList = new ArrayList<>();

/**
* @param args the command line arguments
* @throws java.io.IOException
*/
public static void main(String[] args) throws IOException {

int port = 8900; //Port number the ServerSocket is going to use
ServerSocket myServerSocket = null; //Serversocket for sockets to connect
Socket clientSocket = null; //Listerner for accepted clients
ClientThread[] clientsConnected = new ClientThread[20]; //Max clients in this server
DataInputStream IN = null;

try {
myServerSocket = new ServerSocket(port);
System.out.println("Server waiting for clients on port:" + port);
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}

while (true) {
try { //Freezes while-loop untill a socket have been accepted or if some failure occur
clientSocket = myServerSocket.accept();
IN = new DataInputStream(clientSocket.getInputStream());
String userName = IN.readUTF();
Server.clientUsernameList.add(userName);

System.out.println("Client have connected from:" + clientSocket.getLocalAddress().getHostName());
System.out.println("Username:" + userName);
System.out.println(Server.clientUsernameList);

} catch (Exception e) {
//Print out exception
System.out.println(e);
}
//For-loop that counts every element in Array-clientsConnected
for (int i = 0; i < clientsConnected.length; i++) {
//If-statement checks if current element is null
if(clientsConnected[i] == null){
//If current element in the Array is null then create a new object from ClientThread class
//With a socket and the object of itself as parameter.
(clientsConnected[i] = new ClientThread(clientSocket, clientsConnected)).start();

//Must have a break otherwise it will create 20 objects (Exit for-loop)
break;
} //Exit if-statement
} //Exit for-loop
} //Exit while-loop

}


} I recieve the username from my Class Client when it is running. I print it out to see if I added a username to the list. Now when I try to access the data from my Class Client I recieve nothing/null.



package Server_application;

import java.io.DataInputStream;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
import java.util.TimeZone;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author Seeya
*/
public class Client extends Thread {

ClientGUI GUI = null;
DataInputStream IN = null;
DataOutputStream OUT = null;
Socket SOCKET = null;
String Message = null;
String userName = null;
String ipAdress = "localhost";
int port = 8900;

public Client(ClientGUI gui,String username) {
this.userName = username;
this.GUI = gui;
}



@Override
public void run() {
try {
//Handle Input/Output from client
SOCKET = new Socket(ipAdress, port);
IN = new DataInputStream(SOCKET.getInputStream());
OUT = new DataOutputStream(SOCKET.getOutputStream());

//Sends username to server!
OUT.writeUTF(userName);

System.out.println(Server.clientUsernameList);
GUI.addToList(Server.clientUsernameList.toString());
while (true) {
CheckForMessages(IN);
}

} catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}

}
//-----------------------------------------------------------------
//Method for sending Messages!
public void write(String s) throws IOException{
//Writes message to server so it can send it to other clients.
//Also sends to clients self GUI
String A = s;
OUT.writeUTF(A);
GUI.writeGUI("You said: " + A);
}
//------------------------------------------------------------------
//Method for listening on messages
private void CheckForMessages(DataInputStream in) throws IOException {
try {
String IncomingMessage = in.readUTF();
System.out.println(IncomingMessage);
GUI.writeGUI(IncomingMessage);
} catch (Exception e) {
System.err.println(e);
}
}
}


All that is printed out is [] from my Class Client. Is there something wrong with how I try to access my static variable?




Aucun commentaire:

Enregistrer un commentaire