# Nullpointerexception beim Start



## Angus13 (24. Juli 2013)

Hey leute 

ich habe folgendes problem: ich soll einen chatt schreiben, doch wenn ich ihn öffnen will bekomm ich die fehlermeldung : NullPointerException.
Woran liegt das ?
Hier mein Code:

```
import java.net.*;
import java.io.*;
import java.awt.*;
import java.applet.*;

public class chatapplet extends Applet implements Runnable
{
	public static final int PORT = 8765;
	Socket socket;
	DataInputStream in;
	PrintStream out;
	TextField inputfield;
	TextArea outputarea;
	Thread thread;

	public void init()
	{
		inputfield = new TextField();
		outputarea = new TextArea();
		outputarea.setFont( new Font("Dialog", Font.PLAIN, 12));
		outputarea.setEditable(false);

		this.setLayout(new BorderLayout());
		this.add("South", inputfield);
		this.add("Center", outputarea);

		this.setBackground(Color.lightGray);
		this.setForeground(Color.black);
		inputfield.setBackground(Color.white);
		outputarea.setBackground(Color.white);
	}

	public void start()
	{
		try
		{
			socket = new Socket(this.getCodeBase().getHost(), PORT);
			in = new DataInputStream(socket.getInputStream());
			out = new PrintStream(socket.getOutputStream());
		} catch (IOException e)
		{
			this.showStatus(e.toString());
			say("Verbindung zum Server fehlgeschlagen!");
			System.exit(1);
		}

		say("Verbindung zum Server aufgenommen...");
		public class MyClass
		{
		}
		if (thread == null)
		{
			thread = new Thread(this);
			thread.setPriority(Thread.MIN_PRIORITY);
			thread.start();
		}
	}


	public void stop()
	{
		try
		{
			socket.close();
		} catch (IOException e)
		{
			this.showStatus(e.toString());
		}

		if ((thread !=null) && thread.isAlive())
		{
			thread.stop();
			thread = null;
		}
	}


	public void run()
	{
		String line;

		try
		{
			while(true)
			{
				line = in.readLine();
				if(line!=null)
					outputarea.appendText(line+'\n' );
			}
		} catch (IOException e) { say("Verbindung zum Server abgebrochen"); }
	}


	public boolean action(Event e, Object what)
	{
		if (e.target==inputfield)
		{
			String inp=(String) e.arg;

			out.println(inp);
			inputfield.setText("");
			return true;
		}

		return false;
	}


	public void say(String msg)
	{
		outputarea.appendText("*** "+msg+" ***\n");
	}
}
```


----------



## sheel (24. Juli 2013)

Hi und Willkommen bei tutorials.de,

wie lautet der Stacktrace dazu?
(die Zeilen darunter, durch die man die Codestelle des Fehlers rausfinden kann)

Bitte Codetags verwenden und Fragen nicht als Tutorials einreichen.


----------



## Angus13 (24. Juli 2013)

Hey

da steht rein garnichts drunter :-/
Werde ich das nächste mal tun kenne mich hier noch nicht aus.
Kannst du vielleicht den Code mal überlfiegen?


----------



## hendl (24. Juli 2013)

Hi

Bei mir startet er einwandfrei, außer eben der Fehlermeldung, dass kein Server gefunden wurde und sich gleich wieder schließst.
Dass du keine StackTraces bekommst liegt daran dass du nirgends in Exceptions ein e.printStackTrace(); verwendest. Zusätzlich werden einige Streams nicht vor der Verwendung überprüft.
Hier mal mit StackTraces

```
import java.net.*;
import java.io.*;
import java.awt.*;
import java.applet.*;

public class chatapplet extends Applet implements Runnable {
	public static final int PORT = 8765;
	Socket socket;
	DataInputStream in;
	PrintStream out;
	TextField inputfield;
	TextArea outputarea;
	Thread thread;

	public void init() {
		inputfield = new TextField();
		outputarea = new TextArea();
		outputarea.setFont(new Font("Dialog", Font.PLAIN, 12));
		outputarea.setEditable(false);

		this.setLayout(new BorderLayout());
		this.add("South", inputfield);
		this.add("Center", outputarea);

		this.setBackground(Color.lightGray);
		this.setForeground(Color.black);
		inputfield.setBackground(Color.white);
		outputarea.setBackground(Color.white);
	}

	public void start() {
		try {
			socket = new Socket("127.0.0.1", PORT);
			in = new DataInputStream(socket.getInputStream());
			out = new PrintStream(socket.getOutputStream());
		} catch (IOException e) {
			this.showStatus(e.toString());
			say("Verbindung zum Server fehlgeschlagen!");
			e.printStackTrace();
//			System.exit(1);   Fehler im Chatfenster kann man lesen :D
		}

		say("Verbindung zum Server aufgenommen...");
		class MyClass {
		}
		if (thread == null) {
			thread = new Thread(this);
			thread.setPriority(Thread.MIN_PRIORITY);
			thread.start();
		}
	}

	public void stop() {
		try {
			if(socket!=null)
			socket.close();
		} catch (IOException e) {
			this.showStatus(e.toString());
			e.printStackTrace();
		}

		if ((thread != null) && thread.isAlive()) {
			thread.stop();
			thread = null;
		}
	}

	public void run() {
		String line;
		
		try {
			if(in!=null)
			while (true) {
				line = in.readLine();
				if (line != null)
					outputarea.appendText(line + '\n');
			}
		} catch (IOException e) {
			say("Verbindung zum Server abgebrochen");
			e.printStackTrace();
		}
	}

	public boolean action(Event e, Object what) {
		if (e.target == inputfield) {
			String inp = (String) e.arg;

			out.println(inp);
			inputfield.setText("");
			return true;
		}

		return false;
	}

	public void say(String msg) {
		outputarea.appendText("*** " + msg + " ***\n");
	}
}
```

Lg hendl


----------



## Angus13 (24. Juli 2013)

Woran kann das liegen dass er bei dir startet und bei mir nicht?


----------



## hendl (24. Juli 2013)

Kommt wirklich gar keine Fehlermeldung?
Auch nicht mit dem von mir geposteten Code?


----------



## Angus13 (24. Juli 2013)

Wenn ich es öffnen will steht da nur :

NullPointerException

Bei der Ausführung der Anwendung ist ein Fehler aufgetreten

Bin echt am Verzweifeln


----------



## hendl (24. Juli 2013)

Hmm hab keine Idee mehr was fehlerhaft sein könnte da es bei mir normal läuft und sonst auch keine Fehler auftreten sollten.


----------



## Angus13 (24. Juli 2013)

Diese fehlermeldung t aucht immer auf auch mit den StackTraces
Hast du vielleicht einen simplen chat code im kopf der laufen könnte?


----------



## hendl (24. Juli 2013)

Hmm habe villeicht den Fehler gefunden.

```
socket = new Socket(this.getCodeBase().getHost(), PORT);
```

Dieser this.getCodeBase().getHost() Aufruf liefert bei mir nur einen leeren String und wenn dich dann verbinden willst bekommst du eine NullPointerException.
Ist mir nicht aufgefallen da ich es einfach durch 127.0.0.1 ersetzt habe.

Lg hendl


----------



## Angus13 (24. Juli 2013)

das heißt? was muss ich da ändern?


----------



## hendl (24. Juli 2013)

Kommt drauf an was du mit dem Aufruf für eine IP bekommen willst?


----------



## Angus13 (24. Juli 2013)

Also es soll ein chatt sein durch den ich dem pc der neben meinem steht eine nachricht senden kann


----------



## MetroAffe (24. Juli 2013)

Schalte mich mal dazu ^^ - Aber du arbeitest schon mit Eclipse oder?


----------



## Angus13 (24. Juli 2013)

Moin 
Ja arbeite mit Eclipse


----------



## diel2001 (24. Juli 2013)

Ändere mal alle Stacktraces wie unten beschrieben:
(das was nach dem catch.. steht)


```
try
        {
          ...
        } catch (IOException e)
        {
            ....
           e.printStackTrace();
        }
```


----------



## Angus13 (24. Juli 2013)

das hab ich da jetzt schon drin aber passiert rein garnichts

hab alles versucht :-(

aber nichts funktionert die fehlermeldung taucht weiterhin auf


----------



## hendl (24. Juli 2013)

Hmm hab mir die Methode angesehen und die liefert die Url des Server zurück auf dem sie läuft und heruntergeladen wurde.
Sollte das Applet mal auf einem Server laufen auf dem auch der ChatServer läuft?
Wenn nicht würde ich es ändern ansonsten passt es schon.


----------



## Angus13 (24. Juli 2013)

Wie meinst du das?
Kenn mich nicht so aus  Programmier noch nicht lange


----------



## hendl (24. Juli 2013)

Soll die Anwendung mal auf einem Server laufen?
Wenn nicht würde ich es in eine andere IP ändern.


----------



## Angus13 (24. Juli 2013)

Das ist eig egal weil der Chat nur zur Vorführung für 2 Tage dient. Danach wird er gelöscht.
Bloß bekomme ich ihn nicht zum laufen.


----------



## hendl (24. Juli 2013)

Dann hast du jetzt die Möglichkeiten:

Die IP per Hostnamen auflösen
"Unschön" Eine fixe IP eintragen
An Broadcastadresse senden


----------



## Angus13 (24. Juli 2013)

Was ist am sinnvollsten wenn man auf einen zweiten Rechner der neben meinem steht senden will?


----------



## hendl (24. Juli 2013)

Ändert sich bei dem Rechner die IP?
Wenn nicht könntest du sie fix eintragen.
Ich würde die Methode per Namenauflösung verwenden, wenn nur die 2 Rechner verwendet werden sollen. Wenn es mehrere wären wäre die Broadcastmethode besser.


----------



## Angus13 (24. Juli 2013)

wie löse ich den namen auf?


----------



## hendl (24. Juli 2013)

Einfach die eine Zeile ersetzen und den richtigen Hostnamen reinschreiben 


```
socket = new Socket(java.net.InetAddress.getByName("PCName"), PORT);
```

Lg hendl


----------



## Angus13 (24. Juli 2013)

welche zeile wäre das bei mir? 

Hab die Zeile ersetzt...gleiche Fehlermeldung


----------



## hendl (24. Juli 2013)

Poste dan nochmal den ganzen Code vill hab ich doch was übersehen


----------



## Angus13 (24. Juli 2013)

sind ja 3 klassen
alle 3 klassen oder nur den code von eben?


----------



## hendl (24. Juli 2013)

Mal alle 3 vill ist in einer anderen ein Fehler


----------



## Angus13 (24. Juli 2013)

wie poste ich einen code in so nem kästchen?


----------



## hendl (24. Juli 2013)

einfach den Code in \[java\] 
Code
bla bla bla
\[/java\]

Ohne die Backslashes einfügen


----------



## Angus13 (24. Juli 2013)

das ist vom chatserver

```
import java.net.*;
import java.io.*;
import java.util.*;

public class chatserver implements Runnable
{
	public static final int PORT = 8765;
	protected ServerSocket listen;
	protected Vector<connection> connections;
	Thread connect;

	public chatserver()
	{
		try
		{
			listen = new ServerSocket(PORT);
		} catch (IOException e)
		{
			System.err.println("Fehler beim Erzeugen der Sockets:"+e);
			System.exit(1);
		}

		connections = new Vector<connection>();

		connect = new Thread(this);
		connect.start();
	}

	public void run()
	{
		try
		{
			while(true)
			{
				Socket client=listen.accept();

				connection c = new connection(this, client);
				connections.addElement(c);
			}
		} catch (IOException e)
		{
			System.err.println("Fehler beim Warten auf Verbindungen:"+e);
			System.exit(1);
		}
	}

	public static void main(String[] args)
	{
		new chatserver();
	}

	public void broadcast(String msg)
	{
		int i;
		connection you;

		for (i=0; i<connections.size(); i++)
		{
			you = connections.elementAt(i);
			you.out.println(msg);
		}
	}
}
```

chatapplet

```
import java.net.*;
import java.io.*;
import java.util.*;

public class chatserver implements Runnable
{
	public static final int PORT = 8765;
	protected ServerSocket listen;
	protected Vector<connection> connections;
	Thread connect;

	public chatserver()
	{
		try
		{
			listen = new ServerSocket(PORT);
		} catch (IOException e)
		{
			System.err.println("Fehler beim Erzeugen der Sockets:"+e);
			System.exit(1);
		}

		connections = new Vector<connection>();

		connect = new Thread(this);
		connect.start();
	}

	public void run()
	{
		try
		{
			while(true)
			{
				Socket client=listen.accept();

				connection c = new connection(this, client);
				connections.addElement(c);
			}
		} catch (IOException e)
		{
			System.err.println("Fehler beim Warten auf Verbindungen:"+e);
			System.exit(1);
		}
	}

	public static void main(String[] args)
	{
		new chatserver();
	}

	public void broadcast(String msg)
	{
		int i;
		connection you;

		for (i=0; i<connections.size(); i++)
		{
			you = connections.elementAt(i);
			you.out.println(msg);
		}
	}
}
```
und connection

```
import java.net.*;
import java.io.*;

class connection extends Thread
{
	protected Socket client;
	protected DataInputStream in;
	protected PrintStream out;
	protected chatserver server;

	public connection(chatserver server, Socket client)
	{
		this.server=server;
		this.client=client;

		try
		{
			in = new DataInputStream(client.getInputStream());
			out = new PrintStream(client.getOutputStream());
		} catch (IOException e)
		{
			try { client.close(); } catch (IOException e2) {} ;
			System.err.println("Fehler beim Erzeugen der Streams: " + e);
			return;
		}

		this.start();
	}


	@SuppressWarnings("deprecation")
	public void run()
	{
		String line;

		try
		{
			while(true)
			{
				line=in.readLine();
				if(line!=null)
					server.broadcast(line);
			}
		} catch (IOException e)
		{
			System.out.println("Fehler:" + e);
		}
	}
}
```


----------



## hendl (24. Juli 2013)

Kann dich wieder leider nur enttäuschen laufen alle 3 fehlerfrei bei mir


----------



## Angus13 (24. Juli 2013)

was ein schrott
wie startest du die?


----------



## hendl (24. Juli 2013)

Einfach die Klasse chatserver öffnen und auf den Run Pfeil (falls du Eclipse verwendest)
Den Client auch auf dem selben Weg starten und alles läuft ganz einwandfrei.


----------



## Angus13 (24. Juli 2013)

meinst du die chatserver.java

welchen client****


----------



## hendl (24. Juli 2013)

Ich meinte das chatapplet


----------



## Angus13 (24. Juli 2013)

da steht dann nur run as ant build


----------



## hendl (24. Juli 2013)

Hast du auch ein richtiges Eclipse für Java und JRE installiert?
Sonst müsste es normalerweise den grünen Pfeil geben oder Run --> Run oder Str+ F11


----------



## Angus13 (24. Juli 2013)

da ist ja en grüner pfeil aber wenn ich den anklicke kann ihc aussuchen run as ant build


----------



## hendl (24. Juli 2013)

Hmm schau mal in den Run Configurations nach ob du es nicht irgendwie als Applet starten kannst.
Bei mir startet er es automatisch als Applet


----------



## Angus13 (24. Juli 2013)

es startet aber da steht applet nicht initialisiert...was heißt das?


----------



## hendl (24. Juli 2013)

Hmm bei der Init() sollte eigentlich keine Fehler auftreten.
Aber das Fenster wird schon mal angezeigt und der Server läfut auch?


----------



## Angus13 (24. Juli 2013)

nein der server geht immernoch nur als ant


----------



## hendl (24. Juli 2013)

Hmm der Server wäre doch nur eine normale Java Application die er immer ausführen können sollte.


----------



## Angus13 (24. Juli 2013)

machen an der stelle morgen weiten 
hab feierabend 
schönen tag noch und viiiiielen dank für die hilfe


----------



## hendl (25. Juli 2013)

Hi 
Gibt es einen besonderen Grund warum du das Applet per HTML starten willst und einfach per Java Application da es dann bei mir ausführen zu einer AccesControlException kommt da du nicht genügend Rechte hast einen Socket zu öffnen ohne policy Datei


----------



## Angus13 (25. Juli 2013)

Ich machs mit PHP jetzt
wie geht das am besten ? :/


----------



## hendl (25. Juli 2013)

Ganz ohne Java?


----------



## Angus13 (25. Juli 2013)

PHP und HTML


----------



## hendl (25. Juli 2013)

Ja aber dir muss dann klar sein, dass du zusätzlich eine Datenbank für den Text benötigst und ohne JS oder Ajax sau viel Traffic erzeugst. Welche eine sehr unsaubere Lösung wäre. 
Hier mal mit JS http://www.php-einfach.de/codeschnipsel_10207.php

Ohne JS mit  2 Sekunden Reloadzeit http://www.php-einfach.de/codeschnipsel_5689.php


----------



## Cromon (25. Juli 2013)

Hallo Angus13

Bitte halte dich an die Netiquette des Forums, du findest diese hier:
http://www.tutorials.de/content/872-netiquette.html

Vor allem die folgenden Punkte sollten vermehrt Beachtung finden:


> Unser Forum ist kein Chatroom. Kurz-Beiträge ("Ein-Zeilen Postings"), die einfach so ins Forum "geklatscht" werden, werden ohne Vorwarnung von einem Moderator oder Administrator gelöscht.





> [...] und durchgehend kleingeschriebene Beiträge sind ebenfalls unerwünscht.



Ausserdem wäre es wünschenswert wenn du auch in einer gewissen Form etwas Eigeninitiative zeigen würdest. Konkret also nicht auf jedes Posting eines Users mit "Wie mach ich das?" antworten sondern selber mal bisschen recherchieren und ausprobieren. Wenn du dann an einem Ort nicht weiter kommst kannst du entsprechend ein Posting in der Art von "Ich komme bei diesem Punkt nicht weiter, ich habe das und das versucht, allerdings passiert das und das. Ich vermute es könnte an dem und dem liegen, jedoch weiss ich nicht wie ich das ändern kann." verfassen.

Viele Grüsse
Cromon

Danke  Mehrfachbeiträge zumindest mal zusammengefasst.


----------



## vfl_freak (25. Juli 2013)

Moin,

[OFFTOPIC]
habe mich eh' schon über die Geduld von hendl gewundert ;-)
[/OFFTOPIC]

Gruß
Klaus


----------



## Angus13 (25. Juli 2013)

bitte macht mal en beispiel für en ganz simplen php chat


----------



## hendl (25. Juli 2013)

Ich hab dir doch im vorigen Post eh schon 2 Links mit beiden Möglichkeiten gepostet.


----------



## Angus13 (25. Juli 2013)

funktioniert aber irgendwie nicht.
ich vermute,dass ich irgendwas übersehe


----------



## hendl (25. Juli 2013)

Was funktioniert denn nicht?
Gibt es irgendwelche Fehlermeldungen?


----------



## Angus13 (25. Juli 2013)

ich versuche jetzt einfach selbst einen chat zu erstellen ohne hilfe
schließlich muss ich auch lernen 
DANKE für deien Geduld und deine Hilfe


----------

