Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Allgemeine Java-Programmierung > probleme mit java chat(facharbeit)
Antwort
 
Themen-Optionen
Alt 25.02.2005, 15:11   Nach oben    #1
gauner
Gast
 
Beiträge: n/a
Standard probleme mit java chat(facharbeit)

schreibe gerade im rahmen meiner facharbeit (jgst. 12) einen chat mit client (gui) und server.
mein problem ist, dass ich beim versenden eine nullpointerexception bekomme und ich nicht weiss woran das liegt.

Code:
		Exception in thread "main" java.lang.NullPointerException
		at GUI.empfangen(GUI.java:121)
		at Chat.main(Chat.java:7)
und wenn ich auf senden drücke noch mal:

Code:
java.lang.NullPointerException
		at GUI.senden(GUI.java:110)
		at GUI$SenderOhr.actionPerformed(GUI.java:146)
		at java.awt.TextField.processActionEvent(TextField.java:573)
		at java.awt.TextField.processEvent(TextField.java:541)
		at java.awt.Component.dispatchEventImpl(Component.java:3615)
		at java.awt.Component.dispatchEvent(Component.java:3477)
		at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
		at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
		at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
		at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
		at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
		at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
er startet die grafische oberfläche zwar, aber es kommen direkt die fehler da.. und dann klappt es natürlich nicht.. wäre nett, wenn mir da einer helfen könnte. bin anfänger, also nicht über die schlechte programmierung wundern.. anregungen sind aber willkommen ^^

hier die 6 klassen, einmal für client:



Code:
import java.awt.*;							 // AWT Klassen werden importiert für die grafische Oberfläche.
import java.awt.event.*;
import java.io.IOException;

import javax.swing.*;

public class GUI extends Frame
{
   private Frame fenster;
   public TextArea Ausgabefeld;
   public TextField Eingabefeld;
   public TextField setNameField;
   private Button senden;
   private Button beenden;
   private Button setName;
   private String name;
   private connection verbindung;
	
  public void gui(int breite, int hoehe, String name)
  {
	  connection verbdindung = new connection("127.0.0.1",8765);
	  setName("Chatter");
	 fenster = new Frame();			 // Neues Fenster wird erstellt.
	  fenster.setTitle(name);
	fenster.setLayout(null);	   // Null-Layout wird gesetzt.
fenster.setSize(breite,hoehe);				 // Größe des Fensters wird festgelegt.
fenster.setVisible(true);				 // Fenster wird sichtbar gemacht.

  //  fenster.addWindowListener(new WindowClosingAdapter(true));   // Klasse WindowClosingAdapter wird
																 // eingebunden, damit das Fenster
																 // geschlossen werden kann.
	
	// ActionListener
	SenderOhr ohr = new SenderOhr();
	exit raus = new exit();
	SetzeName setzename = new SetzeName();
	
	//Eingabefeld
	Eingabefeld = new TextField();
	Eingabefeld.addActionListener(ohr);
	Eingabefeld.setBounds(30, 410, 530, 30);
	Eingabefeld.setFont(new java.awt.Font("Dialog", 1, 12));
	
	//Ausgabefeld - kein autoscroll in jre 1.5 nur in 1.4.2!! sinnlos?? scheiss bugs.
	Ausgabefeld = new TextArea();
	Ausgabefeld.setFont(new java.awt.Font("Dialog", 1, 12));
	Ausgabefeld.setEditable(false);
	Ausgabefeld.setBounds(20, 30, 630, 360);
	
	//setNameField
	setNameField = new TextField();
	setNameField.setBounds(30, 450, 120, 20);
	setNameField.setFont(new java.awt.Font("Dialog", 1, 12));
	
	//Button: senden.
	senden = new Button();
	senden.addActionListener(ohr);
	senden.setLabel("senden");
	senden.setBounds(590, 410, 58, 30);
	
	//Button: beenden.
	beenden = new Button();
	beenden.addActionListener(raus);
	beenden.setLabel("beenden");
	beenden.setBounds(600, 460, 50, 20);
	
	//Button: setName.
	setName = new Button();
	setName.addActionListener(setzename);
	setName.setLabel("setze Name");
	setName.setBounds(160, 450, 80, 20);
	
	// Komponenten hinzufuegen.
	fenster.add(Eingabefeld);
	fenster.add(Ausgabefeld);
	fenster.add(senden);
	fenster.add(beenden);
	fenster.add(setNameField);
	fenster.add(setName);

	
	fenster.setForeground(Color.black);
	fenster.setBackground(Color.lightGray);
	Eingabefeld.setBackground(Color.white);
	Ausgabefeld.setBackground(Color.white);
	
	

	// Die Verknüpfung zum ActionListener, welcher den Quelltext zum Addieren beinhaltet.
	// addieren.addActionListener(ActionListener l);

//fenster.pack();						 // Fenster wird soweit verkleinert, dass nur die benötigten
											 // Elemente angezeigt werden und kein Rand mehr. Überschreibt setSize.
fenster.show();						 // Am Ende muss der Frame dann noch angezeigt werden.
  }
  
	
/* TODO: Methoden ändern, so dass der Text an den Server geschickt wird und der Server die Daten dann an ALLE clients zurückschickt (broadcast Methode)
   * und der Text im Ausgabefeld angezeigt wird! Methode schreiben ändern??*/
  
  
  public void schreiben(String message)
  {
	 Ausgabefeld.append(message);
  }
  
  public void senden(String message)
  throws IOException
  {
	  verbindung.out.write(message);
  }
  
  public void empfangen()
  {
		String line = "";

		try
		{
		  while(true)
		  {
			line = verbindung.in.readLine();
			if(line!=null)
			  schreiben(line+'\n' );
		  }
		} catch (IOException e3) { schreiben("Verbindung zum Server abgebrochen"); }
  }
  
  public String getName()
  {
	  String name;
	  name = this.name;
	  return name;
  }
  
  public void setName(String name)
  {
	  this.name = name;
  }
  
  class SenderOhr implements ActionListener
  {
		 public void actionPerformed(ActionEvent e)
	  {
			 try
		{
			   senden(getName()+": "+Eingabefeld.getText()+'\n');
		  Eingabefeld.setText("");
		}
			 catch(IOException e3)
		{
			MsgBox message = new MsgBox
			(new Frame("Fehler") ,e3.toString(), true);
		}
	  }
  }
  
  class exit implements ActionListener
  {
	  public void actionPerformed(ActionEvent e)
	  {
		verbindung.stop();  
		  System.exit(0);
	  }
  }
  
 
  
  class SetzeName  implements ActionListener
  {
	  public void actionPerformed(ActionEvent e)
	  {
		  try
		{
		  String currentname;
		  currentname = getName();
		  setName(setNameField.getText());
		 senden("Der Chatter: "+"'"+currentname+"'"+" hat sich umbenannt in: "+"'"+getName()+"'"+"."+"\n");
		}
		  catch (IOException e2)
		{
			MsgBox message = new MsgBox
			(new Frame("Fehler") ,e2.toString(), true);
		}
	  }
  }
}


Code:
import java.awt.Event;
import java.awt.Frame;
import java.io.*;
import java.net.Socket;

/*
 * Created on 25.02.2005
 *
 * 
 */

/**
 * @author Sebastian Heinecke
 *
 * 
 */
public class connection
{
	  private Socket socket;
	  public BufferedReader in;
	  public BufferedWriter out;
	  private Thread thread;
	  private GUI gui;    //initialisierung der Klasse GUI, damit die globale Verwendung möglich ist.
	  
	  public connection(String host, int port)
	  {
		  //gui = new GUI();
		try
		{
		  this.socket = new Socket(host, port);
		  in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		  out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
		} catch (IOException e)
		{
			MsgBox message = new MsgBox
			  (new Frame("Fehler") ,e.toString(), true);
		  gui.schreiben("Verbindung zum Server fehlgeschlagen!");
		  System.exit(1);
		}
		// schreiben("Verbindung zum Server aufgenommen..."); // <- löst NullPointerException aus.
		if (thread == null)
		{
		  this.thread = new Thread();
		  thread.setPriority(Thread.MIN_PRIORITY);
		  thread.start();
		}
	  }
	  
	  public void stop()
	  {
		try
		{
		  socket.close();
		} catch (IOException e)
		{
			MsgBox message = new MsgBox
			(new Frame("") ,e.toString(), true);
		}

		if ((this.thread !=null) && this.thread.isAlive())
		{
		  this.thread.stop();
		  this.thread = null;
		}
	  }
	  
/*	  public void run()
	  {
		String line = "";

		try
		{
		  while(true)
		  {
			line = this.in.readLine();
			if(line!=null)
			  gui.schreiben(line+'\n' );
		  }
		} catch (IOException e3) { gui.schreiben("Verbindung zum Server abgebrochen"); }
	  } */
	  
/*	  public boolean action(Event e, Object what)
	  {
		if (e.target==gui.Eingabefeld)
		{
		  String inp=(String) e.arg;

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

		return false;
	  }*/
}
Code:
public class Chat {
	public static void main(String[] args)
	{
		
		GUI oberflaeche = new GUI();
		oberflaeche.gui(672,491,"Chat-Client");
		oberflaeche.empfangen();
		
		//  noch nicht ganz fertig
	}
}
Code:
import java.awt.*;
import java.awt.event.*;

class MsgBox extends Dialog implements ActionListener {
 boolean id = false;
 Button ok,can;

 MsgBox(Frame frame, String msg, boolean okcan){
  super(frame, "Message", true);
  setLayout(new BorderLayout());
  add("Center",new Label(msg));
  addOKCancelPanel(okcan);
  createFrame();
  pack();
  setVisible(true);
  }

 void addOKCancelPanel( boolean okcan ) {
  Panel p = new Panel();
  p.setLayout(new FlowLayout());
  createOKButton( p );
  if (okcan == true)
	 createCancelButton( p );
  add("South",p);
  }

 void createOKButton(Panel p) {
  p.add(ok = new Button("OK"));
  ok.addActionListener(this); 
  }

 void createCancelButton(Panel p) {
  p.add(can = new Button("Cancel"));
  can.addActionListener(this);
  }

 void createFrame() {
  Dimension d = getToolkit().getScreenSize();
  setLocation(d.width/3,d.height/3);
  }

 public void actionPerformed(ActionEvent ae){
  if(ae.getSource() == ok) {
	id = true;
	setVisible(false);
	}
  else if(ae.getSource() == can) {
	setVisible(false);
	}
  }
}
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2005, 15:12   Nach oben    #2
gauner
Gast
 
Beiträge: n/a
Standard

und für den server


Code:
 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 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();
 
 	connect = new Thread(this);
 	connect.start();
   }
 
   public void run()
   {
 	try
 	{
 	  while(true)
 	  {
 		Socket client=listen.accept();
 
 		serverconnection c = new serverconnection(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)
   throws IOException
   {
 	int i;
 	connection you;
 
 	for (i=0; i<connections.size(); i++)
 	{
 	  you = (connection) connections.elementAt(i);
 	  you.out.write(msg);
 	}
   }
 }
Code:
  import java.net.*;
  import java.io.*;
  
  class serverconnection extends Thread
  {
    protected Socket client;
    protected BufferedReader in;
    protected BufferedWriter out;
    protected chatserver server;
  
    public serverconnection(chatserver server, Socket client)
    {
  	this.server=server;
  	this.client=client;
  
  	try
  	{
  	  in = new BufferedReader(new InputStreamReader(client.getInputStream()));
  	  out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
  	} catch (IOException e)
  	{
  	  try { client.close(); } catch (IOException e2) {} ;
  	  System.err.println("Fehler beim Erzeugen der Streams: " + e);
  	  return;
  	}
  
  	this.start();
    }
  
  
    public void run()
    {
  	String line;
  
  	try
  	{
  	  while(true)
  	  {
  		line=in.readLine();
  		if(line!=null)
  		  server.broadcast(line);
  	  }
  	} catch (IOException e)
  	{
  	  System.err.println("Fehler:" + e);
  	}
    }
  }
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2005, 17:48   Nach oben    #3
peschmae
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Zeile 134 ist bei mir eine Leerzeile. :confused:

Könntest du die eventuell noch heraussuchen? Ich nehme mal an die Fehlermeldung stammt nicht von/bezieht sich auf die Leerzeile.

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2005, 18:41   Nach oben    #4
bacarni
Benutzer
 
Benutzerbild von bacarni
 
Registriert seit: 05.01.2005
Beiträge: 81
Standard

[OFFTOPIC]
wow, cool: Programmieren als Facharbeit.

Ich durfte mich damals "nur" mit proftpd rumschlagen und den auseinandernehmen. Programmieren war bei uns nicht angesagt. Es tut sich wenigstens was an den schulen
[/OFFTOPIC]
__________________
Ein Vorurteil ist schwerer zu spalten als ein Atom -- Albert Einstein
bacarni ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2005, 18:41   Nach oben    #5
gauner
Gast
 
Beiträge: n/a
Standard

so habs noch mal 1 zu 1 so kopiert wie ichs da stehen hatte und neu kompiliert und die fehler oben neu aufgeschrieben (Edit), sry glaub ich hatte vorher ein paar kommentare drin, die ich rausgenommen habe

hier aber noma die fehler:

die hier kommen direkt, wenn ich das prog gestartet habe
Code:
		Exception in thread "main" java.lang.NullPointerException
		at GUI.empfangen(GUI.java:121)
		at Chat.main(Chat.java:7)
und die hier wenn ich etwas schreibe und auf senden drücke

Code:
java.lang.NullPointerException
		at GUI.senden(GUI.java:110)
		at GUI$SenderOhr.actionPerformed(GUI.java:146)
		at java.awt.TextField.processActionEvent(TextField.ja  va:573)
		at java.awt.TextField.processEvent(TextField.java:541  )
		at java.awt.Component.dispatchEventImpl(Component.jav  a:3615)
		at java.awt.Component.dispatchEvent(Component.java:34  77)
		at java.awt.EventQueue.dispatchEvent(EventQueue.java:  456)
		at java.awt.EventDispatchThread.pumpOneEventForHierar  chy(EventDispatchTh
read.java:201)
		at java.awt.EventDispatchThread.pumpEventsForHierarch  y(EventDispatchThre
ad.java:151)
		at java.awt.EventDispatchThread.pumpEvents(EventDispa  tchThread.java:145)

		at java.awt.EventDispatchThread.pumpEvents(EventDispa  tchThread.java:137)

		at java.awt.EventDispatchThread.run(EventDispatchThre  ad.java:100)
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2005, 18:45   Nach oben    #6
peschmae
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Beim ersten Fehler: Kannst du da mal gucken was null ist? Also ob verbindung == null oder verbindung.in == null

Eventuell auch mal einen Debugger versuchen, damit kannst du schrittweise ausführen und immer gucken was wie gesetzt ist und ob das auch das ist was du willst/was sein sollte.
Falls du so ein Ding bedienen kannst. Sind auch nicht ganz ohne wenn man sowas noch nie benutzt hat

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2005, 19:03   Nach oben    #7
gauner
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von peschmae
Beim ersten Fehler: Kannst du da mal gucken was null ist? Also ob verbindung == null oder verbindung.in == null
hmm was meinst du damit? sry ich bin wirklich ziemlich neu auf dem gebiet und bin froh, dass ich mir da halbwegs was zusammengebastelt hab (mit eclipse, da ist das mit der fehlerbehebung ja recht einfach, aber bei sowas is auch eclipse machtlos..)

also wenn du meinst ob ich verbindung oder verbindung.in irgendwo == null gesetzt habe, das müsste eigentlich nirgendswo sein..


zu dem debugger: hast du da ne anleitung (n link wos erklärt steht?) dann guck ich mir das mal an..

aber danke, dass du dich bemühst!
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2005, 19:32   Nach oben    #8
gauner
Gast
 
Beiträge: n/a
Standard

also, hab ne debugger fkt in eclipse gefunden..

verbindung scheint = null zu sein!

hier der screenshot..

 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2005, 20:40   Nach oben    #9
peschmae
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

So, hab mich mal dran gemacht und den Programmablauf verfolgt und siehe da.

Der Fehler:
Code:
	  connection verbdindung = new connection("127.0.0.1",8765);
Frag mich grad ob dir das reicht. Naja, egal. Heute sind wir überfreundlich und schreiben noch einen Roman dazu

Was macht das? Das macht eine lokale Variable die wohl verbindung heissen sollte und nicht verbdindung, aber in dem Fall macht das keinen Unterschied. Also eine lokale Variable.
Diese "versteckt" die Variable "verbindung" der Klasse. D.h. solange du dort in der Methode auf verbindung (bzw. verbdinwas) zugreifst ist die lokale Variable im Spiel.
Auf die klassenweit gültige Variable kannst du mit this->verbindung zugreifen.

Die Lösung: Du willst ja nicht wirklich eine lokale Variable erstellen also heisst der Code:
Code:
verbindung = new connection("127.0.0.1",8765);
MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 01:41   Nach oben    #10
gauner
Gast
 
Beiträge: n/a
Standard

ok, das wars, danke für deine mühe, hast mir sehr geholfen!!!

jetzt hab ich aber noch ein problem.. wäre nett, wenn du mir da auch noch helfen könntest, es ist die selbe nullpointerexception, nur woanders..

ich würde gerne, das mir beim erfolgreichen verbinden angezeigt wird, das er verbunden hat.

dazu hab ich die connection klasse wie folgt verändert

Code:
import java.awt.Event;
import java.awt.Frame;
import java.io.*;
import java.net.Socket;

/*
 * Created on 25.02.2005
 *
 * 
 */

/**
 * @author Sebastian
 *
 * 
 */
public class connection
{
	  private Socket socket;
	  public BufferedReader in;
	  public BufferedWriter out;
	  private Thread thread;
	  private GUI gui;    //initialisierung der Klasse GUI, damit die globale Verwendung möglich ist.
	  
	  public connection(String host, int port)
	  {
		try
		{
			 gui = new GUI();	
		  this.socket = new Socket(host, port);
		  in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		  out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
		} catch (IOException e)
		{
			MsgBox message = new MsgBox
			  (new Frame("Fehler") ,e.toString(), true);
		  gui.schreiben("Verbindung zum Server fehlgeschlagen!");
		  System.exit(1);
		}
		{
		this.gui.schreiben("Verbindung zum Server aufgenommen...");
		}
		if (thread == null)
		{
		  this.thread = new Thread();
		  thread.setPriority(Thread.MIN_PRIORITY);
		  thread.start();
		}
	  }
	  
	  public void stop()
	  {
		try
		{
		  socket.close();
		} catch (IOException e)
		{
			MsgBox message = new MsgBox
			(new Frame("") ,e.toString(), true);
		}

		if ((this.thread !=null) && this.thread.isAlive())
		{
		  this.thread.stop();
		  this.thread = null;
		}
	  }
	  
/*	  public void run()
	  {
		String line = "";

		try
		{
		  while(true)
		  {
			line = this.in.readLine();
			if(line!=null)
			  gui.schreiben(line+'\n' );
		  }
		} catch (IOException e3) { gui.schreiben("Verbindung zum Server abgebrochen"); }
	  } */
	  
/*	  public boolean action(Event e, Object what)
	  {
		if (e.target==gui.Eingabefeld)
		{
		  String inp=(String) e.arg;

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

		return false;
	  }*/
}
undzwar in zeile 41

Code:
		this.gui.schreiben("Verbindung zum Server aufgenommen...");
dann kommen diese fehler hier.. und das prog bricht mit "Fatal exception occured. Program will now exit." ab.

Code:
java.lang.NullPointerException
	at GUI.schreiben(GUI.java:113)
	at connection.<init>(connection.java:41)
	at GUI.gui(GUI.java:30)
	at Chat.main(Chat.java:17)
habe versucht, den fehler so zu finden, wie du ihn vorher gefunden hast, aber es scheint alles richtig zu sein. die gui klasse ist als globale variable definiert, müsste also erreichbar sein.. habs auch mit vererbung versucht, kommt das gleiche bei rum..

kannst du da noch mal bitte gucken??

danke!
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 10:58   Nach oben    #11
peschmae
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

public void gui(int breite, int hoehe, String name) - also die Methode wo das AusgabeFeld initialisiert wird ist ja kein Konstruktor.

Was du hier machst ist ein neues GUI-Objekt:
gui = new GUI();
bei dem Aufruf wird AusgabeFeld nicht initialisiert - d.h. es ist halt NULL. Entsprechend auch die Exception wenn du später darauf zugreifen willst.

Aber ich glaube das gui = new GUI(); ist eh nicht das was du machen willst. Ich habe zwar den Überblick über den Code überhaupt nicht, aber ich denke du möchtest eher ein schon vorhandenes GUI-Objekt verwenden in der Methode dort, oder?

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 16:39   Nach oben    #12
gauner
Gast
 
Beiträge: n/a
Standard

hmm dann wundert es mich aber, dass es vorher, in zeile 37 funktioniert.. und das ist ja noch in der selben methode!

Code:
                {
			MsgBox message = new MsgBox
			  (new Frame("Fehler") ,e.toString(), true);
		 gui.schreiben("Verbindung zum Server fehlgeschlagen!"); // <- das hier funktioniert ja!
		  System.exit(1);
		}
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2005, 19:01   Nach oben    #13
peschmae
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Ja, aber der Code wird vermutlich gar nicht ausgeführt, ist ja schliesslich im Catch-Block und wenn es da keine IOException gibt läuft der auch nicht.

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.02.2005, 19:01   Nach oben    #14
gauner
Gast
 
Beiträge: n/a
Standard

ja stimmt, habe da jetzt länger rumprobiert und finde da nicht wirklich eine lösung.. wenn ich das

Code:
verbindung = new connection("gauner.dyndns.org",8765);
ans ende der gui prozedur in der klasse GUI setze, müsste doch eigentlich vorher alles initialisiert sein.. aber es kommt der gleiche fehler..

hast du nen vorschlag wie ich das lösen könnte?
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.02.2005, 19:20   Nach oben    #15
peschmae
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Ja, aber die gui - Prozedur ist kein Konstruktor und wird in der Methode
public connection() der connection-Klasse gar nirgendwo ausgeführt. Du
machst da ein neues GUI-Objekt die gui-Methode wird _nicht_ ausgeführt.

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.06.2005, 00:49   Nach oben    #16
matt
Gast
 
Beiträge: n/a
Standard

Hallo! Ich habe deinen Fehler gefunden:
Du hast keinen Konstruktor in GUI, denn:

ein Konstruktor hat den gleichen Namen wie die Klasse und da Java zwischen groß und kleinschreibung unterscheidet ist gui und GUI nicht dasselbe.
zweitens hat ein Konstruktor keinen Rückgabewert - also muss das void weg.

Ersetze also das hier:
public void gui(int breite, int hoehe, String name)

durch das:
public GUI(int breite, int hoehe, String name)

dann wird der Konstruktor bei der initialisierung aufgerufen. sonst nicht. In deinem fall wurde er eben nicht aufgerufen, was zur folge hatte, dass alle Elemente (die Buttons, Textfelder, etc.) nicht initialisiert waren. Nicht initialisierte "Objekte" haben immer den wert null und haben natürlich keine methoden.
du kannst also nicht einfach sagen: null.printMe() oder soetwas ähnliches, weil null einfach nur für "nicht existent" steht. Dass heisst also: immer wenn du eine NullPointerException hast, liegt das daran, dass du auf ein Objekt zugreifen möchtest, dass nicht existiert (entweder weil es noch nicht initialisiert wurde oder weil eine solche variable nicht existiert) Das ist in 100% der fälle der grund.

Ich würde dir übrigens die Entwicklungsumgebung Eclipse (www.eclipse.org) ans herz legen, die ist nicht nur gratis, sondern auch noch die beste JAVA IDE, die es gibt. Die erkennt diese kleinen fehler während du schreibst und unterstreicht sie rot für dich. zusätzlich bietet sie noch code vervollständigung und eine kurze hilfe zu allen Klassen bzw. Methoden die Java selbst anbietet an. Dazu kommen natürlich noch eine menge anderer sachen, aber überzeug dich selbst!

liebe grüße,
Matt

[edit]huch hab wohl übersehen, dass der thread noch ne zweite seite hat... nunja, es heisst übrigens GUI Methode und nicht Prozedur. das ist ein wichtiger unterschied [/edit]
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.