# Vektor verliert letztes element



## BigBoss (23. Jul 2007)

hi,

ich schreib gerade an einem programm was einem wi einen socket bereit stellt worüber dieses informationen abruft.

hier einmal die klasse


```
package de.BigBoss;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Vector;

public class aliasServer
{
	private int debug=0;
	private DateFormat df = new SimpleDateFormat ("dd.MM.yyyy", Locale.GERMANY);	//definieren des Datumsformates
    private DateFormat tf = new SimpleDateFormat ("HH:mm:ss", Locale.GERMANY);		//definieren des Zeitformates
    private MySQL dbv1=null;			//neue MySQL Verbindung Instanziiren
	private static Vector servplayVektor=null;
	private Vector playerVektor=null;
	private Vector test;
	private String selectbox="";
	public aliasServer(MySQL dbv2, int debugger)
	{
		this.debug = debugger;
		this.dbv1 = dbv2;
	}//ende aliasServer
	public void handleConnection(Socket client)throws IOException
	{
		Date date = new Date();
		int test=0;
		//int j=0;
		int i=0;
		int len;
		int splen;
		String sqlquery="";
		ResultSet result = null;
		String res="";
		InputStream in = client.getInputStream();
		BufferedReader reader   = new BufferedReader(new InputStreamReader(in));
		String inString = reader.readLine();
		sqlquery = "SELECT * FROM server WHERE id=" + inString + ";";
		//System.out.println(sqlquery);
		try
		{
			result = dbv1.ExecQ(sqlquery);
			result.next();
			res = result.getString("name");
			result.close();
		}
        catch(SQLException sqle)
        {
            System.out.println("SQLException: " + sqle.getMessage());
            System.out.println("SQLState: " + sqle.getSQLState());
            System.out.println("VendorError: " + sqle.getErrorCode());
        }//ende try/catch
		splen = servplayVektor.size();
		System.out.println(df.format(date)+ " " + tf.format(date) + ": Webinterface Anfrage von : " + client.getInetAddress() + " auf Server: " + res);
		if(splen != 0)
		{
			playerVektor = (Vector)servplayVektor.get(Integer.parseInt(inString)-1);
			if(playerVektor==null)
			{
				len = 0;
			}
			else
			{
				len = playerVektor.size();
			}//ende if
	        User player = new User();
	        if(len != 0)
	        {
	        	selectbox="";
	        	test=0;
		        for (i=0; i<len ;i++)
		        {
		        	player = (User)playerVektor.get(i);
		        	if(player.getServer().equals(inString))
		        	{
		        		selectbox = selectbox + "echo \'<option value=\'.\"" + player.getId() + "\".\'>\'.htmlentities(\"" + player.getncName() + "\").\'</option>\';\n";
		        		//selectbox = selectbox + "echo \"<option value=\".\"" + player.getId() + "\".\">\".htmlentities(\"" + player.getncName() + "\").\"</option>\";\n";
		        		test=1;
		        	}//ende if
		        }//ende for
		        if(test==0)
	        	{
		        	//System.out.println("no Players");
		        	selectbox="echo \"<option value=\\\"\\\">no Players found</option>\";\n";
	        	}//ende if
	        }
	        else
	        {
	        	//System.out.println("no Players");
	        	selectbox="echo \"<option value=\\\"\\\">no Players found</option>\";\n";
	        }//ende if
		}
		else
		{
			selectbox="echo \"<option value=\\\"\\\">no Players found</option>\";\n";
		}//ende if
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
        System.out.println(selectbox);
        out.write(selectbox);
    	out.newLine();
    	out.flush();
	}//ende handelConnection
/**************************************************************************************************/
	public void setPlayerArray(Vector playerAry)
	{
		servplayVektor = playerAry;
		System.out.println("test3: " + servplayVektor);
		test = servplayVektor;
	}//ende setPlayerArray
/**************************************************************************************************/
	public void listen(int Port)
	{
		ServerSocket server = null;
		try
		{
			server = new ServerSocket(Port);
			while(true)
			{
				Socket client = null;
				try
				{
					client = server.accept();
					System.out.println("test4: " + servplayVektor);
					handleConnection(client);
				}
				catch(IOException e)
				{
					e.printStackTrace();
				}//ende try
			}//ende while
		}
		catch(Exception e)
		{ 
			e.printStackTrace();
		}
		finally
		{
			if(server != null)
			{
				try
				{
					server.close();
				}
				catch(IOException e)
				{
					e.printStackTrace();
				}//ende try
			}//ende if
		}//ende try
	}//ende listen
}//ende accespoint
```

wenn ich nun eine Anfrage über das wi starte bekomme ich in der console folgende meldeungen angezeigt

test3: [[Spieler1], null, null, null, null, null, null, [Spieler2]]
test2: [[Spieler1], null, null, null, null, null, null, []]
test4: [[Spieler1], null, null, null, null, null, null, []]
23.07.2007 21:26:55: Webinterface Anfrage von : /192.168.0.1 auf Server: Test Server
echo "<option value=\"\">no Players found</option>";

in der ausgabe test2 und test4 sind vom letzten server die infos weg der erste server hat aber nachwievor die richtige info drin.
Ich bin echt etwas ratlos warum er das macht.
Die übergabe aus einer anderen klasse funktioniert richtig wie die ausgae test3 zeigt aber danach verändere ich den String nicht mehr und trotzdem ist die info weg aber nur im letzten server und sonst in keinem.
Falls jemand eine idee hat was ich falsch mache würde ich mich über einen tipp freuen 
Gruß BB


----------



## Murray (24. Jul 2007)

Wo wird denn setPlayerVector aufgerufen? Warum ist setPlayerVector nicht static? Wozu soll die kopierte Referenz auf den statischen servplayVektor in der der Instanzvariablen test dienen?


----------



## Chris6783 (24. Jul 2007)

Hat die DB das richtige Format?


----------



## BigBoss (25. Jul 2007)

hi,
erstmal Danke für eure Antworten.
Ich hab den Fehler gestern gefunden. 
is eigentlich was ziemlich dummes aber naja passiert.
Es ist mir aufgefallen als ich der Frage von Murray nachgegangen bin wo der Aufruf von setPlayerVektor ist.
Nach diesem Aufruf standen noch eine Anweisung die eben diesen Vektor den ich dort eingefügt habe auf die länge 0 setzt.
deswegen ist der immer leer gewesen.
Diese Anweisung kam noch von einem früheren Test.

Gruß BB


----------

