Warum so höllisch langsam?

Status
Nicht offen für weitere Antworten.

megastrahler

Mitglied
Hallo,

ich hoffe ihr könnt mir helfen! Bin was JAVA angeht noch ein ziemlicher Neuling und habe ein Chatprogramm, welches aus 3 Klassen besteht (connection, chatserver und chatapplet).

Ich starte zunächst chatserver über die Konsole, also java chatserver

Dann öffne ich das applet im Browser, und es lädt auch zunächst mit normaler Geschwindigkeit.

Wenn ich es dann allerdings schließe, und wieder eine neue Instanz öffne, dauert das Laden des Applets ewig, und auch das Schreiben im Textfeld sowie das abschicken reagiert erst nach ein paar Sekunden.

Was zum Henker ist da los, es ist wirklich zum k..... !!!

Ich wär über jeden Tipp dankbar!

gruss
megastrahler
 

Reality

Top Contributor
Hi,
arbeite vielleicht mal mit StringBuffer. Das bringt einen spürbaren Geschwindigkeitsschub.
Aber ich denke nicht, dass das das Hauptproblem ist.

Liebe Grüße
Reality
 
G

Guest

Gast
Es ist nicht wenig Code, daher wollte ich ihn erst nicht posten :)

Also, hier zunächst der Code für den ie Server - Klasse:

Code:
import java.net.*;
import java.io.*;
import java.util.*;

public class chatserver implements Runnable
{
	public static final int PORT = 80;
	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();

				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 = (connection) connections.elementAt(i);
			you.out.println(msg);
		}
	}
}

Hier der Code für das Applet:

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 = 80;
	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...");

		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");
	}
}

Und schließlich noch die Connection Klasse:

Code:
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();
	}


	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);
		}
	}
}

Will noch anmerken, dass der Code nicht von mir selbst stammt. Kompiliert habe ich mit JCreator.

Danke schonmal im Vorraus!!

gruss
megastrahler
 

megastrahler

Mitglied
Achja, noch eine genaue Erklärung der Situation:

Ich kann mehrere Fenster des Applets öffnen - dann läuft alles ohne Probleme.
Es wird erst so langsam, wenn zum erstenmal ein Applet-Fenster geschlossen wird. Wenn ich danach ein neues Applet-Fenster öffne, geht so gut wie garnichts mehr... Es dauert und dauert und dauert... man kann in der Zeit zum Mittagessen gehen.

Meine Vermutung: Der Server befindet sich dann irgendwie in einer Schleife. Kann es sein dass ich asynchrone Sockets verwenden muss?

Danke

gruss
megastrahler
 

citizen_erased

Bekanntes Mitglied
füge im applet noch einen methode destroy() ein und schliesse hier alle streams und den socket und beende den thread. vielleicht bringt es was.
in einem weiteren schritt könntest du in destroy() auch noch einen nachricht an den server schicken, vorauf der diesen chat-klienten wieder aus seiner liste austragen kann. aber ich glaube nicht, dass dein problem hier liegt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C java.util Timer läuft zu langsam? Java Basics - Anfänger-Themen 1
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 5
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 0
J Interface Einlesen von Bildern mithilfe von URL zu langsam Java Basics - Anfänger-Themen 5
L mehrdimensionale arrays ich verzweifle so langsam... Java Basics - Anfänger-Themen 9
M Simpler Algorithmus läuft extrem langsam. Java Basics - Anfänger-Themen 3
E Mausklick Erkennung langsam? Java Basics - Anfänger-Themen 2
W Eclipse auf Linux langsam und stürzt teilweise ab Java Basics - Anfänger-Themen 2
C Einlesen in Array von Textdatei sehr langsam Java Basics - Anfänger-Themen 7
J Bei Hinzufügen von JButton Programm langsam Java Basics - Anfänger-Themen 3
C Mehrdimensionale Arrays in Java langsam? Java Basics - Anfänger-Themen 8
F Ist lesen Text von einem Zip File besonders langsam??? Java Basics - Anfänger-Themen 4
A .setEnabled(false) zu langsam? Java Basics - Anfänger-Themen 17
D JButton oder ImageIcon klickt "langsam" Java Basics - Anfänger-Themen 5
M mouseMotionListener zu langsam Java Basics - Anfänger-Themen 2
K Bilder "langsam" laden Java Basics - Anfänger-Themen 4
D Keylistener zu langsam Java Basics - Anfänger-Themen 7
Antoras Datei laden mit BufferedReader sehr langsam Java Basics - Anfänger-Themen 7
F Programm sehr langsam. Windows 7? Java Basics - Anfänger-Themen 23
hdi FileReader / BufferedReader langsam? Java Basics - Anfänger-Themen 3
G ArrayList bei großen Zahlen langsam? Java Basics - Anfänger-Themen 10
A Maus positionserkennung zu langsam Java Basics - Anfänger-Themen 4
E Methode sehr langsam und funktioniert teilweise nicht Java Basics - Anfänger-Themen 3
S JFileChooser öffnet Unterverzeichnisse sehr langsam Java Basics - Anfänger-Themen 2
C Java ist langsam Java Basics - Anfänger-Themen 4
G Ein Image langsam einblenden und nach 5 Sekunden ausblenden? Java Basics - Anfänger-Themen 10
F Java Applikation ProjectX startet sehr langsam Java Basics - Anfänger-Themen 3
D Warum läuft dieses Programm so langsam? Java Basics - Anfänger-Themen 5
G Verzweifle langsam beim Javalernen Java Basics - Anfänger-Themen 8
C FileInputStream sehr langsam Java Basics - Anfänger-Themen 5
G jar-File startet zu langsam? Java Basics - Anfänger-Themen 9
S die java machine läuft viel zuuuu langsam, woher kommt das?? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben