Swing Stehe auf dem Schlauch...(BufferedReader_Writer-Fehler?)

Seikuassi

Aktives Mitglied
Hallo Forum-Nutzer,

habe (hoffentlich) einen simplen BufferedReader- oder BufferedWriter-Fehler.
Funktion des Programms ist eigentlich ganz einfach:Es erscheint eine Konsole (mit Swing kreiert), in der man beim Server den Port und die Puffergroesse der BufferedReader und BufferedWriter eingeben muss. Nach dem Verbinden kann man dann in einem weiteren Textfeld, das vorher deaktiviert war, Nachrichten (Strings) schicken. Im "Monitor" werden eingehende und abgehende Nachrichten angezeigt.
Die Nachrichten werden auch auf dem Monitor angezeigt, aber nicht verschickt/empfangen.

Meiner Fehlerdiagnose nach, spinnt BufferedReader. Er liest nichts...

Frage:Woran liegt das?
Ich weiß eigentlich, dass dieses Forum kein "Hausaufgaben-Löser" ist. Doch ich hatte schon vorher mit DataInputStream und DataOutputStream etwa das gleiche Programm in der Konsole geschrieben und dort funktionierte es. Es ist wahrscheinlich ein einfacher Fehler...:noe:

Server.java
Java:
package classes;

import java.applet.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.*;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.*;
import java.io.*;
import java.net.*;
import javax.imageio.ImageIO;
import javax.swing.*;

// --- Hauptklasse --- //
class Server{
	// --- Klassen --- //
	
	// --- Methoden --- //
	public static void error_report(Exception exc0){
		try{
			PrintWriter out=new PrintWriter("/error_report.txt"); // Datei erstellen
			
			exc0.printStackTrace(out); // Fehler schreiben
			out.close(); // Datei schliessen
		}catch(Exception exc1){
			exc1.printStackTrace();
		}
		return;
	}
	public static void main(String[]arg){
			SwingUtilities.invokeLater(new Runnable(){
				public void run(){
					try{
						main_Frame=new Window("Server",800,600); // Fenster erzeugen
						
						main_Frame.create_Controls(); // Steuerelemente erstellen
						main_Frame.setVisible(true); // Fenster sichtbar machen
					}catch(Exception e){
						JOptionPane.showMessageDialog(main_Frame,(Object)e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE); // Fehler anzeigen
						System.exit(-1); // Programm mit Fehlercode beenden
					}finally{
						System.gc(); // Garbage Collector
					}
				}
			});
		return;
	}
	// --- Variablen --- //
	public static Window main_Frame;
	public static Receiver RC;
	public static Socket socket;
	public static ServerSocket Ssocket;
	public static Transmitter TM;
	// --- Aufzaehlungen --- //
	
}

// --- Klassen --- //
class Receiver extends Thread{
	Receiver(int BufferSize)throws Exception{
		this.in=new BufferedReader(new InputStreamReader(Server.socket.getInputStream()),BufferSize);
	}
	// --- Klassen --- //
	
	// --- Methoden --- //
	@Override public void run(){
		while(true){
			try{
				this.buffer=this.in.readLine(); // Nachrichten abhoeren und speichern
				Server.main_Frame.print_monitor('<'+this.buffer); // Nachricht auf Konsole ausgeben
			}catch(SocketException exc0){ // wenn die Verbindung getrennt wurde
				try{
					Server.main_Frame.print_monitor("Receiver is closed...");
					Server.main_Frame.print_monitor("Transmitter is closed...");
					this.in.close();
					Server.TM.out.close();
				}catch(SocketException exc1){ // wenn Verbindung getrennt wurde
					return;
				}catch(Exception exc1){
					Server.error_report(exc1); // Fehler ausgeben
					System.exit(-1); // Programm mit Fehlercode beenden
				}
				return;
			}catch(EOFException exc){
				Server.main_Frame.maco.connect_Button.doClick();
				Server.main_Frame.print_monitor("Connection closed.");
				return;
			}catch(Exception exc){
				Server.error_report(exc); // Fehler ausgeben
				System.exit(-1); // Programm mit Fehlercode beenden
			}
		}
	}
	// --- Variablen --- //
	private volatile String buffer="";
	private BufferedReader in;
	// --- Aufzahelungen --- //
	
}
class Transmitter extends Thread{
	Transmitter(int BufferSize)throws Exception{
		this.out=new BufferedWriter(new OutputStreamWriter(Server.socket.getOutputStream()),BufferSize);
	}
	// --- Klassen --- //
	
	// --- Methoden --- //
	@Override public void run(){
		while(true){
			try{
				while(this.buffer.equals("")==true){ // solange Puffer leer ist
					this.sleep(500); // 500 Millisekunden warten
				}
				this.out.write(this.buffer,0,this.buffer.length()); // Pufferinhalt senden
				this.out.newLine(); // Absatz hinzufuegen
				Server.main_Frame.print_monitor('>'+this.buffer); // Nachricht auf Konsole ausgeben
				this.buffer=""; // Puffer loeschen
			}catch(SocketException exc){ // wenn Verbindung getrennt wurde
				return;
			}catch(EOFException exc){
				System.exit(0); // Programm beenden
			}catch(Exception exc){
				Server.error_report(exc); // Fehler ausgeben
				System.exit(-1); // Programm mit Fehlercode beenden
			}
		}
	}
	// --- Variablen --- //
	public volatile String buffer="";
	public BufferedWriter out;
	// --- Aufzahelungen --- //
	
}
class Window extends JFrame{
	Window(String title,int width,int height)throws Exception{
		if(height>0||width>0){
			{ // Fenstereinstellungen festlegen
				this.setTitle(title); // Fenstertitel festlegen
				this.setIconImage(ImageIO.read(getClass().getResource("/resources/network.png"))); // Icon laden und anzeigen
				this.setDefaultCloseOperation(EXIT_ON_CLOSE); // beim Schliessen des Fensters, soll das Programm beendet werden
				this.setPreferredSize(new Dimension(width,height)); // Fenstergroesse festlegen
				this.pack();
				this.setResizable(false); // Fenstergroesse kann nicht veraendert werden
				this.setLocationRelativeTo(null); // Fenster zentrieren
			}
			this.height=height;
			this.width=width;
		}else{
			throw new Exception("Invalid height or/and width."); // Ausnahme werfen
		}
	}
	// --- Klassen --- //
	class ActionLi implements ActionListener{
		// --- Klassen --- //
		
		// --- Methoden --- //
		@Override public void actionPerformed(ActionEvent e){
			if(e.getSource()==maco.connect_Button){ // wenn der "Connect"-Button gedrueckt wurde
				if(this.connected==false){ // wenn noch keine Verbindung aufgebaut wurde
					clear_monitor(); // Konsole loeschen
					lock_settings_input(); // Optionseingaben sperren
					if(connect()==true){ // wenn kein Fehler beim Verbinden aufgetreten ist
						maco.connect_Button.setForeground(Color.WHITE); // Vordergrundfarbe (weiss) festlegen
						maco.connect_Button.setBackground(Color.RED); // Hintergundfarbe (rot) festlegen
						maco.connect_Button.setText("Disconnect"); // Text festlegen
						this.connected=true;
					}else{
						unlock_settings_input(); // Optionseingaben entsperren
					}
				}else{ // wenn bereits eine Verbindung besteht
					disconnect();
					unlock_settings_input(); // Optionseingaben entsperren
					maco.connect_Button.setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
					maco.connect_Button.setBackground(Color.GREEN); // Hintergundfarbe (gruen) festlegen
					maco.connect_Button.setText("Connect"); // Text festlegen
					this.connected=false;
				}
			}
			return;
		}
		// --- Variablen --- //
		public boolean connected=false;
		// --- Aufzaehlungen --- //
		
	}
	class KeyLi extends KeyAdapter{
		// --- Klassen --- //
		
		// --- Methoden --- //
		@Override public void keyPressed(KeyEvent e){
			if(e.getSource()==maco.input&&e.getKeyCode()==KeyEvent.VK_ENTER){ // wenn im Eingabefeld die Enter-Taste gedrueckt wurde
				if(maco.input.getText().equals("")==false){ // wenn keine leere Zeichenkette vorhanden ist
					Server.TM.buffer=maco.input.getText(); // Eingabe senden
					maco.input.setText(""); // Eingabefeld leeren
				}
			}
			return;
		}
		// --- Variablen --- //
		
		// --- Aufzaehlungen --- //
		
	}
	class WindowLi extends WindowAdapter{
		// --- Klassen --- //
		
		// --- Methoden --- //
		@Override public void windowClosed(WindowEvent e){
			if(Server.Ssocket!=null){ // wenn noch eine Socket-Verbindung besteht
				disconnect(); // Verbindung beenden
			}
			return;
		}
		// --- Variablen --- //
		
		// --- Aufzaehlungen --- //
		
	}
	// --- Methoden --- //
	public void clear_monitor(){
		this.maco.monitor.setText(""); // Konsole loeschen
		return;
	}
	private boolean connect(){
		String[]text_content={new String(),new String()};
		
		text_content[0]=this.maco.settings_input[0].getText(); // Port
		text_content[1]=this.maco.settings_input[1].getText(); // Puffergroesse
		if(text_content[0].isEmpty()==false&&text_content[1].isEmpty()==false){
			try{
				int[]values={Integer.valueOf(text_content[0]),Integer.valueOf(text_content[1])};
				
				if(values[1]>0){ // wenn alle Eingaben gueltig sind
					Server.Ssocket=new ServerSocket(values[0]); // ServerSocket erstellen
					Server.Ssocket.setSoTimeout(5000); // Timeout (5 Sekunden) festlegen
					Server.socket=Server.Ssocket.accept(); // auf Client warten
					this.print_monitor("Connected to client \""+Server.socket.getRemoteSocketAddress()+"\"."); // Status ausgeben
					Server.RC=new Receiver(values[1]*1024);
					Server.RC.start(); // Empfaenger starten
					Server.TM=new Transmitter(values[1]*1024);
					Server.TM.start(); // Sender starten
				}else{ // wenn Eingaben ungueltig sind
					this.print_monitor("Error:Buffer size must be greater than 0."); // Fehler ausgeben
					return false;
				}
			}catch(SocketTimeoutException exc){ // wenn das Timeout ueberschritten wurde
				this.print_monitor("Error:Client not responding."); // Fehler ausgeben
				return false;
			}catch(NumberFormatException exc){ // wenn keine Zahl eingegeben wurde (Port und Puffergroesse)
				this.print_monitor("Error:Invalid number input."); // Fehler ausgeben
				return false;
			}catch(IllegalArgumentException exc){ // wenn die Portnummer ungueltig ist (<0 oder >65535)
				this.print_monitor("Error:Port must between 0 and 65535."); // Fehler ausgeben
				return false;
			}catch(Exception exc){
				this.print_monitor("Error:"+exc.getMessage()+"."); // Fehler ausgeben
				return false;
			}finally{
				if(Server.Ssocket!=null){ // wenn ServerSocket noch besteht
					try{
						Server.Ssocket.close(); // Verbindung schliessen
						Server.Ssocket=null;
					}catch(Exception exc){
						Server.error_report(exc); // Fehler ausgeben
						System.exit(-1); // Programm mit Fehlercode beenden
					}
				}
			}
		}else{ // wenn Eingaben fehlen
			this.print_monitor("Error:Options inclomplete. Check inputs."); // Fehler ausgeben
			return false;
		}
		return true;
	}
	public void create_Controls(){
		{ // Ueberschrift
			this.maco.heading.setFont(new Font(Font.DIALOG,Font.BOLD,20)); // Schriftart festlegen
			this.maco.heading.setForeground(Color.YELLOW); // Schriftfarbe (gelb) festlegen
			this.maco.heading.setText("<html><u>Server</u></html>"); // Text festlegen
			this.maco.heading.setHorizontalAlignment(JLabel.CENTER); // zentrieren
			this.maco.heading.setBounds(0,10,this.width,25); // Position und Groesse festlegen
			this.maco.heading.setVisible(true); // Ueberschrift sichtbar machen
			this.maco.surface.add(this.maco.heading); // Ueberschrift der Oberflaeche hinzufuegen
		}
		{ // Einstellungstext
			this.maco.settings_label.setFont(this.maco.std_Font2); // Schriftart festlegen
			this.maco.settings_label.setForeground(Color.WHITE); // Vordergundfarbe (weiss) festlegen
			this.maco.settings_label.setText("Optionen"); // Text festlegen
			this.maco.settings_label.setBounds(25,485,200,25); // Position und Groesse festlegen
			this.maco.settings_label.setVisible(true); // Einstellungstext sichtbar machen
			this.maco.surface.add(this.maco.settings_label); // Einstellungstext der Oberflaeche hinzufuegen
		}
		{ // Eingabefelder fuer Einstellungen
			{ // Portnummer-Eingabefeld-Ueberschrift
				this.maco.settings_heading[0].setFont(this.maco.std_Font); // Schriftart festlegen
				this.maco.settings_heading[0].setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
				this.maco.settings_heading[0].setText("Port");
				this.maco.settings_heading[0].setBounds(50,510,75,20); // Position und Groesse festlegen
				this.maco.settings_heading[0].setVisible(true); // Portnummer-Eingabefeld-Ueberschrift sichtbar machen
				this.maco.surface.add(this.maco.settings_heading[0]); // Portnummer-Eingabefeld-Ueberschrift der Oberflaeche hinzufuegen
			}
			{ // Portnummer-Eingabefeld
				this.maco.settings_input[0].setFont(this.maco.std_Font); // Schriftart festlegen
				this.maco.settings_input[0].setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
				this.maco.settings_input[0].setBackground(Color.WHITE); // Hintergrundfarbe (weiss) festlegen
				this.maco.settings_input[0].setBounds(50,530,75,20); // Position und Groesse festlegen
				this.maco.settings_input[0].setVisible(true); // Portnummer-Eingabefeld sichtbar machen
				this.maco.surface.add(this.maco.settings_input[0]); // Portnummer-Eingabefeld der Oberflaeche hinzufuegen
			}
			{ // Puffergroesse-Eingabefeld-Ueberschrift
				this.maco.settings_heading[1].setFont(this.maco.std_Font); // Schriftart festlegen
				this.maco.settings_heading[1].setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
				this.maco.settings_heading[1].setText("Puffergroesse (kB)"); // Text festlegen
				this.maco.settings_heading[1].setBounds(150,510,100,20); // Position und Groesse festlegen
				this.maco.settings_heading[1].setVisible(true); // Puffergroesse-Eingabefeld-Ueberschrift sichtbar machen
				this.maco.surface.add(this.maco.settings_heading[1]); // Puffergroesse-Eingabefeld-Ueberschrift der Oberflaeche hinzufuegen
			}
			{ // Puffergroesse-Eingabefeld
				this.maco.settings_input[1].setFont(this.maco.std_Font); // Schriftart festlegen
				this.maco.settings_input[1].setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
				this.maco.settings_input[1].setBackground(Color.WHITE); // Hintergrundfrabe (weiss) festlegen
				this.maco.settings_input[1].setBounds(150,530,100,20); // Position und Groesse festlegen
				this.maco.settings_input[1].setVisible(true); // Puffergroesse-Eingabefeld sichtbar machen
				this.maco.surface.add(this.maco.settings_input[1]); // Puffergroesse-Eingabefeld der Oberflaeche hinzufuegen
			}
		}
		{ // "Connect"-Button
			this.maco.connect_Button.addActionListener(this.ActLi); // ActionListener hinzufuegen
			this.maco.connect_Button.setFont(this.maco.std_Font); // Schriftart festlegen
			this.maco.connect_Button.setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
			this.maco.connect_Button.setBackground(Color.GREEN); // Hintergrundfarbe (gruen) festlegen
			this.maco.connect_Button.setText("Connect"); // Text festlegen
			this.maco.connect_Button.setBounds(450,520,100,20); // Position und Groesse festlegen
			this.maco.connect_Button.setVisible(true); // "Connect"-Button sichtbar machen
			this.maco.surface.add(this.maco.connect_Button); // "Connect"-Button der Oberflaeche hinzufuegen
		}
		{ // "Monitor"
			{ // "Monitor"-Textfeld
				this.maco.monitor.setLineWrap(true); // automatischer Zeilenunmbruch aktiviert
				this.maco.monitor.setWrapStyleWord(true);
				this.maco.monitor.setEditable(false); // Textfeld darf vom Benutzer nicht editiert werden, solange die Einstellungen nicht festgelegt wurden
				this.maco.monitor.setFont(this.maco.std_Font); // Schriftart festlegen
				this.maco.monitor.setForeground(Color.WHITE); // Vordergundfarbe (weiss) festlegen
				this.maco.monitor.setBackground(Color.BLACK); // Hintergrundfarbe (schwarz) festlegen
			}
			{ // "Monitor"-Scrollbar
				this.maco.monitor_scrollbar=new JScrollPane(this.maco.monitor); // Scrollbar dem "Monitor" hinzufuegen
				this.maco.monitor_scrollbar.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); // horizontaler Scrollbalken nie anzeigen
				this.maco.monitor_scrollbar.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); // vertikaler Scrollbalken immer anzeigen
				this.maco.monitor_scrollbar.setBackground(Color.WHITE); // Farbe (weiss) festlegen
				this.maco.monitor_scrollbar.setBounds(this.width/2-650/2,35,650,400); // Position und Groesse festlegen
				this.maco.monitor_scrollbar.setVisible(true); // "Monitor"-Scrollbar sichtbar machen
				this.add(this.maco.monitor_scrollbar); // Scrollbar und "Monitor" dem Fenster hinzufuegen
			}
		}
		{ // Eingabefeld
			this.maco.input.addKeyListener(this.KLi); // KeyListener hinzufuegen
			this.maco.input.setEditable(false); // Eingabefeld darf nicht benutzt werden, solange keine Verbindung besteht
			this.maco.input.setFont(this.maco.std_Font); // Schriftart festlegen
			this.maco.input.setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
			this.maco.input.setBackground(this.maco.disabled_color); // Hintergrundfarbe (disabled_color) festlegen
			this.maco.input.setBounds(this.width/2-650/2,450,650,25); // Position und Groesse festlegen
			this.maco.input.setVisible(true); // Eingabefeld sichtbar machen
			this.maco.surface.add(this.maco.input); // Eingabefeld der Oberflaeche hinzufuegen
		}
		{ // Oberflaeche
			this.maco.surface.setLayout(null); // kein Layout verwenden
			this.maco.surface.setBackground(new Color(77,77,77)); // Hintergrundfarbe (dunkelgrau) festlegen
			this.maco.surface.setVisible(true); // Oberflaeche sichtbar machen
			this.add(this.maco.surface); // Oberflaeche dem Fenster hinzufuegen
		}
		return;
	}
	private void disconnect(){
		if(Server.socket!=null){ // wenn Socket-Verbindung noch besteht
			try{
				Server.socket.close(); // Socket schliessen
				Server.socket=null;
				if(Server.Ssocket!=null){ // wenn ServerSocket-Verbindung noch besteht
					Server.Ssocket.close(); // ServerSocket schliessen
					Server.Ssocket=null;
				}
				System.gc(); // Garbage Collector
			}catch(Exception exc){
				Server.error_report(exc); // Fehler ausgeben
				System.exit(-1); // Programm mit Fehlercode beenden
			}
		}
		return;
	}
	private void lock_settings_input(){
		for(byte i=0;i<this.maco.settings_input.length;i++){ // Optionseingabefelder sperren
			this.maco.settings_input[i].setEditable(false); // Eingaben sperren
			this.maco.settings_input[i].setBackground(this.maco.disabled_color); // Hintegrundfarbe (disabled_color) festlegen
		}
		this.maco.input.setEditable(true); // Eingabefeld entsperren
		this.maco.input.setBackground(Color.WHITE); // Hintergrundfarbe (weiss) festlegen
		return;
	}
	public void print_monitor(String text){
		this.maco.monitor.append(text+'\n');
		return;
	}
	private void unlock_settings_input(){
		for(byte i=0;i<this.maco.settings_input.length;i++){ // Optionseingabefelder entsperren
			this.maco.settings_input[i].setEditable(true); // Eingaben entsperren
			this.maco.settings_input[i].setBackground(Color.WHITE); // Hintegrundfarbe (weiss) festlegen
		}
		this.maco.input.setEditable(false); // Eingabefeld sperren
		this.maco.input.setBackground(this.maco.disabled_color); // Hintergrundfarbe (disabled_color) festlegen
		return;
	}
	// --- Variablen --- //
	public ActionLi ActLi=new ActionLi();
	private int height;
	private KeyLi KLi=new KeyLi();
	public Controls maco=new Controls();
	private int width;
	private WindowLi WinLi=new WindowLi();
	// --- Aufzaehlungen --- //
	
}

// --- Datenstrukturen --- //
class Controls{
	public Color background_color=new Color(77,77,77);
	public JButton connect_Button=new JButton();
	public Color disabled_color=new Color(179,179,179);
	public JLabel heading=new JLabel();
	public JTextField input=new JTextField();
	public volatile JTextArea monitor=new JTextArea();
	public JScrollPane monitor_scrollbar;
	public JTextField[]settings_input={new JTextField(),new JTextField()};
	public JLabel[]settings_heading={new JLabel(),new JLabel()};
	public JLabel settings_label=new JLabel();
	public Font std_Font=new Font(Font.DIALOG,Font.PLAIN,10);
	public Font std_Font2=new Font(Font.DIALOG,Font.BOLD,14);
	public JPanel surface=new JPanel();
}

Client.java
s. nächste Antwort

Ich hoffe meine Programmstruktur geht euch nicht zu sehr auf die Nerven...:oops:

Ich wäre dankbar für jede Hilfe!

Mit freundlichen Grüßen
Seikuassi
 
Zuletzt bearbeitet:

Seikuassi

Aktives Mitglied
Platz zu gering gewesen...

Client.java:

Java:
package classes;

import java.applet.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.*;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.*;
import java.io.*;
import java.net.*;
import javax.imageio.ImageIO;
import javax.swing.*;

// --- Hauptklasse --- //
class Client{
	// --- Klassen --- //
	
	// --- Methoden --- //
	public static void error_report(Exception exc0){
		try{
			PrintWriter out=new PrintWriter("/error_report.txt"); // Datei erstellen
			
			exc0.printStackTrace(out); // Fehler schreiben
			out.close(); // Datei schliessen
		}catch(Exception exc1){
			exc1.printStackTrace();
		}
		return;
	}
	public static void main(String[]arg){
			SwingUtilities.invokeLater(new Runnable(){
				public void run(){
					try{
						main_Frame=new Window("Client",800,600); // Fenster erzeugen
						
						main_Frame.create_Controls(); // Steuerelemente erstellen
						main_Frame.setVisible(true); // Fenster sichtbar machen
					}catch(Exception e){
						JOptionPane.showMessageDialog(main_Frame,(Object)e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE); // Fehler anzeigen
						System.exit(-1); // Programm mit Fehlercode beenden
					}finally{
						System.gc(); // Garbage Collector
					}
				}
			});
		return;
	}
	// --- Variablen --- //
	public static Window main_Frame;
	public static Receiver RC;
	public static Socket socket;
	public static Transmitter TM;
	// --- Aufzaehlungen --- //
	
}

// --- Klassen --- //
class Receiver extends Thread{
	Receiver(int BufferSize)throws Exception{
		this.in=new BufferedReader(new InputStreamReader(Client.socket.getInputStream()),BufferSize);
	}
	// --- Klassen --- //
	
	// --- Methoden --- //
	@Override public void run(){
		while(true){
			try{
				this.buffer=this.in.readLine(); // Nachrichten abhoeren und speichern
				Client.main_Frame.print_monitor('<'+this.buffer); // Nachricht auf Konsole ausgeben
				this.buffer=""; // Puffer loeschen
			}catch(SocketException exc0){ // wenn die Verbindung getrennt wurde
				try{
					Client.main_Frame.print_monitor("Receiver is closed...");
					Client.main_Frame.print_monitor("Transmitter is closed...");
					this.in.close();
					Client.TM.out.close();
				}catch(SocketException exc1){ // wenn Verbindung getrennt wurde
					return;
				}catch(Exception exc1){
					Client.error_report(exc1); // Fehler ausgeben
					System.exit(-1); // Programm mit Fehlercode beenden
				}
				return;
			}catch(EOFException exc){
				System.exit(0); // Programm beenden
			}catch(Exception exc){
				Client.error_report(exc); // Fehler ausgeben
				System.exit(-1); // Programm mit Fehlercode beenden
			}
		}
	}
	// --- Variablen --- //
	private volatile String buffer="";
	private BufferedReader in;
	// --- Aufzahelungen --- //
	
}
class Transmitter extends Thread{
	Transmitter(int BufferSize)throws Exception{
		this.out=new BufferedWriter(new OutputStreamWriter(Client.socket.getOutputStream()),BufferSize);
	}
	// --- Klassen --- //
	
	// --- Methoden --- //
	@Override public void run(){
		while(true){
			try{
				while(this.buffer.equals("")==true){ // solange Puffer leer ist
					this.sleep(500); // 500 Millisekunden warten
				}
				this.out.write(this.buffer,0,this.buffer.length()); // Pufferinhalt senden
				Client.main_Frame.print_monitor('>'+this.buffer); // Nachricht auf Konsole ausgeben
				this.buffer=""; // Puffer loeschen
			}catch(SocketException exc){ // wenn Verbindung getrennt wurde
				return;
			}catch(EOFException exc){
				System.exit(0); // Programm beenden
			}catch(Exception exc){
				Client.error_report(exc); // Fehler ausgeben
				System.exit(-1); // Programm mit Fehlercode beenden
			}
		}
	}
	// --- Variablen --- //
	public volatile String buffer="";
	public BufferedWriter out;
	// --- Aufzahelungen --- //
	
}
class Window extends JFrame{
	Window(String title,int width,int height)throws Exception{
		if(height>0||width>0){
			{ // Fenstereinstellungen festlegen
				this.setTitle(title); // Fenstertitel festlegen
				this.setIconImage(ImageIO.read(getClass().getResource("/resources/network.png"))); // Icon laden und anzeigen
				this.setDefaultCloseOperation(EXIT_ON_CLOSE); // beim Schliessen des Fensters, soll das Programm beendet werden
				this.setPreferredSize(new Dimension(width,height)); // Fenstergroesse festlegen
				this.pack();
				this.setResizable(false); // Fenstergroesse kann nicht veraendert werden
				this.setLocationRelativeTo(null); // Fenster zentrieren
			}
			this.height=height;
			this.width=width;
		}else{
			throw new Exception("Invalid height or/and width."); // Ausnahme werfen
		}
	}
	// --- Klassen --- //
	class ActionLi implements ActionListener{
		// --- Klassen --- //
		
		// --- Methoden --- //
		@Override public void actionPerformed(ActionEvent e){
			if(e.getSource()==maco.connect_Button){ // wenn der "Connect"-Button gedrueckt wurde
				if(this.connected==false){ // wenn noch keine Verbindung aufgebaut wurde
					clear_monitor(); // Konsole loeschen
					lock_settings_input(); // Optionseingaben sperren
					if(connect()==true){ // wenn kein Fehler beim Verbinden aufgetreten ist
						maco.connect_Button.setForeground(Color.WHITE); // Vordergrundfarbe (weiss) festlegen
						maco.connect_Button.setBackground(Color.RED); // Hintergundfarbe (rot) festlegen
						maco.connect_Button.setText("Disconnect"); // Text festlegen
						this.connected=true;
					}else{
						unlock_settings_input(); // Optionseingaben entsperren
					}
				}else{ // wenn bereits eine Verbindung besteht
					disconnect();
					unlock_settings_input(); // Optionseingaben entsperren
					maco.connect_Button.setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
					maco.connect_Button.setBackground(Color.GREEN); // Hintergundfarbe (gruen) festlegen
					maco.connect_Button.setText("Connect"); // Text festlegen
					this.connected=false;
				}
			}
			return;
		}
		// --- Variablen --- //
		public boolean connected=false;
		// --- Aufzaehlungen --- //
		
	}
	class KeyLi extends KeyAdapter{
		// --- Klassen --- //
		
		// --- Methoden --- //
		@Override public void keyPressed(KeyEvent e){
			if(e.getSource()==maco.input&&e.getKeyCode()==KeyEvent.VK_ENTER){ // wenn im Eingabefeld die Enter-Taste gedrueckt wurde
				if(maco.input.getText().equals("")==false){ // wenn keine leere Zeichenkette vorhanden ist
					Client.TM.buffer=maco.input.getText(); // Eingabe senden
					maco.input.setText(""); // Eingabefeld leeren
				}
			}
			return;
		}
		// --- Variablen --- //
		
		// --- Aufzaehlungen --- //
		
	}
	class WindowLi extends WindowAdapter{
		// --- Klassen --- //
		
		// --- Methoden --- //
		@Override public void windowClosed(WindowEvent e){
			if(Client.socket!=null){ // wenn noch eine Socket-Verbindung besteht
				disconnect(); // Verbindung beenden
			}
			return;
		}
		// --- Variablen --- //
		
		// --- Aufzaehlungen --- //
		
	}
	// --- Methoden --- //
	public void clear_monitor(){
		this.maco.monitor.setText(""); // Konsole loeschen
		return;
	}
	private boolean connect(){
		String[]text_content={new String(),new String(),new String()};
		
		text_content[0]=this.maco.settings_input[0].getText(); // Port
		text_content[1]=this.maco.settings_input[1].getText(); // HostName
		text_content[2]=this.maco.settings_input[2].getText(); // Puffergroesse
		if(text_content[0].isEmpty()==false&&text_content[1].isEmpty()==false&&text_content[2].isEmpty()==false){
			try{
				int[]values={Integer.valueOf(text_content[0]),Integer.valueOf(text_content[2])};
				
				if(values[1]>0){ // wenn alle Eingaben gueltig sind
					InetSocketAddress InetAddress=new InetSocketAddress(text_content[1],values[0]); // Adresse definieren
					Client.socket=new Socket(); // Socket erstellen
					Client.socket.connect(InetAddress,1000); // Verbindung aufbauen, Timeout:1 Sekunde
					this.print_monitor("Connected to server \""+Client.socket.getRemoteSocketAddress()+"\"."); // Status ausgeben
					Client.RC=new Receiver(values[1]*1024);
					Client.RC.start(); // Empfaenger starten
					Client.TM=new Transmitter(values[1]*1024);
					Client.TM.start(); // Sender starten
				}else{ // wenn Eingaben ungueltig sind
					this.print_monitor("Error:Buffer size must be greater than 0."); // Fehler ausgeben
					return false;
				}
			}catch(SocketTimeoutException exc){ // wenn das Timeout ueberschritten wurde
				this.print_monitor("Error:Server not responding."); // Fehler ausgeben
				return false;
			}catch(NumberFormatException exc){ // wenn keine Zahl eingegeben wurde (Port und Puffergroesse)
				this.print_monitor("Error:Invalid number input."); // Fehler ausgeben
				return false;
			}catch(UnknownHostException exc){ // wenn der Host nicht existiert
				this.print_monitor("Error:Unknown Hostname."); // Fehler ausgeben
				return false;
			}catch(IllegalArgumentException exc){ // wenn die Portnummer ungueltig ist (<0 oder >65535)
				this.print_monitor("Error:Port must between 0 and 65535."); // Fehler ausgeben
				return false;
			}catch(Exception exc){
				this.print_monitor("Error:"+exc.getMessage()+"."); // Fehler ausgeben
				return false;
			}
		}else{ // wenn Eingaben fehlen
			this.print_monitor("Error:Options inclomplete. Check inputs."); // Fehler ausgeben
			return false;
		}
		return true;
	}
	public void create_Controls(){
		{ // Ueberschrift
			this.maco.heading.setFont(new Font(Font.DIALOG,Font.BOLD,20)); // Schriftart festlegen
			this.maco.heading.setForeground(Color.YELLOW); // Schriftfarbe (gelb) festlegen
			this.maco.heading.setText("<html><u>Client</u></html>"); // Text festlegen
			this.maco.heading.setHorizontalAlignment(JLabel.CENTER); // zentrieren
			this.maco.heading.setBounds(0,10,this.width,25); // Position und Groesse festlegen
			this.maco.heading.setVisible(true); // Ueberschrift sichtbar machen
			this.maco.surface.add(this.maco.heading); // Ueberschrift der Oberflaeche hinzufuegen
		}
		{ // Einstellungstext
			this.maco.settings_label.setFont(this.maco.std_Font2); // Schriftart festlegen
			this.maco.settings_label.setForeground(Color.WHITE); // Vordergundfarbe (weiss) festlegen
			this.maco.settings_label.setText("Optionen"); // Text festlegen
			this.maco.settings_label.setBounds(25,485,200,25); // Position und Groesse festlegen
			this.maco.settings_label.setVisible(true); // Einstellungstext sichtbar machen
			this.maco.surface.add(this.maco.settings_label); // Einstellungstext der Oberflaeche hinzufuegen
		}
		{ // Eingabefelder fuer Einstellungen
			{ // Portnummer-Eingabefeld-Ueberschrift
				this.maco.settings_heading[0].setFont(this.maco.std_Font); // Schriftart festlegen
				this.maco.settings_heading[0].setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
				this.maco.settings_heading[0].setText("Port");
				this.maco.settings_heading[0].setBounds(50,510,75,20); // Position und Groesse festlegen
				this.maco.settings_heading[0].setVisible(true); // Portnummer-Eingabefeld-Ueberschrift sichtbar machen
				this.maco.surface.add(this.maco.settings_heading[0]); // Portnummer-Eingabefeld-Ueberschrift der Oberflaeche hinzufuegen
			}
			{ // Portnummer-Eingabefeld
				this.maco.settings_input[0].setFont(this.maco.std_Font); // Schriftart festlegen
				this.maco.settings_input[0].setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
				this.maco.settings_input[0].setBackground(Color.WHITE); // Hintergrundfarbe (weiss) festlegen
				this.maco.settings_input[0].setBounds(50,530,75,20); // Position und Groesse festlegen
				this.maco.settings_input[0].setVisible(true); // Portnummer-Eingabefeld sichtbar machen
				this.maco.surface.add(this.maco.settings_input[0]); // Portnummer-Eingabefeld der Oberflaeche hinzufuegen
			}
			{ // HostName-Eingabefeld-Ueberschrift
				this.maco.settings_heading[1].setFont(this.maco.std_Font); // Schriftart festlegen
				this.maco.settings_heading[1].setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
				this.maco.settings_heading[1].setText("Hostname"); // Text festlegen
				this.maco.settings_heading[1].setBounds(150,510,150,20); // Position und Groesse festlegen
				this.maco.settings_heading[1].setVisible(true); // HostName-Eingabefeld-Ueberschrift sichtbar machen
				this.maco.surface.add(this.maco.settings_heading[1]); // HostName-Eingabefeld-Ueberschrift der Oberflaeche hinzufuegen
			}
			{ // HostName-Eingabefeld
				this.maco.settings_input[1].setFont(this.maco.std_Font); // Schriftart festlegen
				this.maco.settings_input[1].setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
				this.maco.settings_input[1].setBackground(Color.WHITE); // Hintergrundfarbe (weiss) festlegen
				this.maco.settings_input[1].setBounds(150,530,150,20); // Position und Groesse festlegen
				this.maco.settings_input[1].setVisible(true); // HostName-Eingabefeld sichtbar machen
				this.maco.surface.add(this.maco.settings_input[1]); // HostName-Eingabefeld der Oberflaeche hinzufuegen
			}
			{ // Puffergroesse-Eingabefeld-Ueberschrift
				this.maco.settings_heading[2].setFont(this.maco.std_Font); // Schriftart festlegen
				this.maco.settings_heading[2].setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
				this.maco.settings_heading[2].setText("Puffergroesse (kB)"); // Text festlegen
				this.maco.settings_heading[2].setBounds(325,510,100,20); // Position und Groesse festlegen
				this.maco.settings_heading[2].setVisible(true); // Puffergroesse-Eingabefeld-Ueberschrift sichtbar machen
				this.maco.surface.add(this.maco.settings_heading[2]); // Puffergroesse-Eingabefeld-Ueberschrift der Oberflaeche hinzufuegen
			}
			{ // Puffergroesse-Eingabefeld
				this.maco.settings_input[2].setFont(this.maco.std_Font); // Schriftart festlegen
				this.maco.settings_input[2].setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
				this.maco.settings_input[2].setBackground(Color.WHITE); // Hintergrundfrabe (weiss) festlegen
				this.maco.settings_input[2].setBounds(325,530,100,20); // Position und Groesse festlegen
				this.maco.settings_input[2].setVisible(true); // Puffergroesse-Eingabefeld sichtbar machen
				this.maco.surface.add(this.maco.settings_input[2]); // Puffergroesse-Eingabefeld der Oberflaeche hinzufuegen
			}
		}
		{ // "Connect"-Button
			this.maco.connect_Button.addActionListener(this.ActLi); // ActionListener hinzufuegen
			this.maco.connect_Button.setFont(this.maco.std_Font); // Schriftart festlegen
			this.maco.connect_Button.setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
			this.maco.connect_Button.setBackground(Color.GREEN); // Hintergrundfarbe (gruen) festlegen
			this.maco.connect_Button.setText("Connect"); // Text festlegen
			this.maco.connect_Button.setBounds(450,520,100,20); // Position und Groesse festlegen
			this.maco.connect_Button.setVisible(true); // "Connect"-Button sichtbar machen
			this.maco.surface.add(this.maco.connect_Button); // "Connect"-Button der Oberflaeche hinzufuegen
		}
		{ // "Monitor"
			{ // "Monitor"-Textfeld
				this.maco.monitor.setLineWrap(true); // automatischer Zeilenunmbruch aktiviert
				this.maco.monitor.setWrapStyleWord(true);
				this.maco.monitor.setEditable(false); // Textfeld darf vom Benutzer nicht editiert werden, solange die Einstellungen nicht festgelegt wurden
				this.maco.monitor.setFont(this.maco.std_Font); // Schriftart festlegen
				this.maco.monitor.setForeground(Color.WHITE); // Vordergundfarbe (weiss) festlegen
				this.maco.monitor.setBackground(Color.BLACK); // Hintergrundfarbe (schwarz) festlegen
			}
			{ // "Monitor"-Scrollbar
				this.maco.monitor_scrollbar=new JScrollPane(this.maco.monitor); // Scrollbar dem "Monitor" hinzufuegen
				this.maco.monitor_scrollbar.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); // horizontaler Scrollbalken nie anzeigen
				this.maco.monitor_scrollbar.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); // vertikaler Scrollbalken immer anzeigen
				this.maco.monitor_scrollbar.setBackground(Color.WHITE); // Farbe (weiss) festlegen
				this.maco.monitor_scrollbar.setBounds(this.width/2-650/2,35,650,400); // Position und Groesse festlegen
				this.maco.monitor_scrollbar.setVisible(true); // "Monitor"-Scrollbar sichtbar machen
				this.add(this.maco.monitor_scrollbar); // Scrollbar und "Monitor" dem Fenster hinzufuegen
			}
		}
		{ // Eingabefeld
			this.maco.input.addKeyListener(this.KLi); // KeyListener hinzufuegen
			this.maco.input.setEditable(false); // Eingabefeld darf nicht benutzt werden, solange keine Verbindung besteht
			this.maco.input.setFont(this.maco.std_Font); // Schriftart festlegen
			this.maco.input.setForeground(Color.BLACK); // Vordergrundfarbe (schwarz) festlegen
			this.maco.input.setBackground(this.maco.disabled_color); // Hintergrundfarbe (disabled_color) festlegen
			this.maco.input.setBounds(this.width/2-650/2,450,650,25); // Position und Groesse festlegen
			this.maco.input.setVisible(true); // Eingabefeld sichtbar machen
			this.maco.surface.add(this.maco.input); // Eingabefeld der Oberflaeche hinzufuegen
		}
		{ // Oberflaeche
			this.maco.surface.setLayout(null); // kein Layout verwenden
			this.maco.surface.setBackground(new Color(77,77,77)); // Hintergrundfarbe (dunkelgrau) festlegen
			this.maco.surface.setVisible(true); // Oberflaeche sichtbar machen
			this.add(this.maco.surface); // Oberflaeche dem Fenster hinzufuegen
		}
		return;
	}
	private void disconnect(){
		if(Client.socket!=null){ // wenn Socket-Verbindung noch besteht
			try{
				Client.socket.close(); // Socket schliessen
				Client.socket=null;
				System.gc(); // Garbage Collector
			}catch(Exception exc){
				Client.error_report(exc); // Fehler ausgeben
				System.exit(-1); // Programm mit Fehlercode beenden
			}
		}
		return;
	}
	private void lock_settings_input(){
		for(byte i=0;i<this.maco.settings_input.length;i++){ // Optionseingabefelder sperren
			this.maco.settings_input[i].setEditable(false); // Eingaben sperren
			this.maco.settings_input[i].setBackground(this.maco.disabled_color); // Hintegrundfarbe (disabled_color) festlegen
		}
		this.maco.input.setEditable(true); // Eingabefeld entsperren
		this.maco.input.setBackground(Color.WHITE); // Hintergrundfarbe (weiss) festlegen
		return;
	}
	public void print_monitor(String text){
		this.maco.monitor.append(text+'\n');
		return;
	}
	private void unlock_settings_input(){
		for(byte i=0;i<this.maco.settings_input.length;i++){ // Optionseingabefelder entsperren
			this.maco.settings_input[i].setEditable(true); // Eingaben entsperren
			this.maco.settings_input[i].setBackground(Color.WHITE); // Hintegrundfarbe (weiss) festlegen
		}
		this.maco.input.setEditable(false); // Eingabefeld sperren
		this.maco.input.setBackground(this.maco.disabled_color); // Hintergrundfarbe (disabled_color) festlegen
		return;
	}
	// --- Variablen --- //
	private ActionLi ActLi=new ActionLi();
	private int height;
	private KeyLi KLi=new KeyLi();
	public Controls maco=new Controls();
	private int width;
	private WindowLi WinLi=new WindowLi();
	// --- Aufzaehlungen --- //
	
}

// --- Datenstrukturen --- //
class Controls{
	public Color background_color=new Color(77,77,77);
	public JButton connect_Button=new JButton();
	public Color disabled_color=new Color(179,179,179);
	public JLabel heading=new JLabel();
	public JTextField input=new JTextField();
	public volatile JTextArea monitor=new JTextArea();
	public JScrollPane monitor_scrollbar;
	public JTextField[]settings_input={new JTextField(),new JTextField(),new JTextField()};
	public JLabel[]settings_heading={new JLabel(),new JLabel(),new JLabel()};
	public JLabel settings_label=new JLabel();
	public Font std_Font=new Font(Font.DIALOG,Font.PLAIN,10);
	public Font std_Font2=new Font(Font.DIALOG,Font.BOLD,14);
	public JPanel surface=new JPanel();
}
 
Zuletzt bearbeitet:

Joose

Top Contributor
Ohne mir jetzt den Code angeschaut zu haben ... wie kommst du zu deiner Fehlerdiagnose?

Probiere doch dein Problem auf ein KSKB runterzubrechen damit findet man Fehler dann meist selber, bzw. ist es leichter den Fehler zu finden.

EDIT: Ich lasse den Beitrag vorerst in diesem Bereich, würde ihn aber verschieben da du selbst glaubst das Problem hat nichts mit einer UI Komponente zu tun.
 
Zuletzt bearbeitet:

Seikuassi

Aktives Mitglied
Hallo Joose,

bin damit einverstanden, dass du das Thema in den richtigen Bereich verschieben willst (Netzwerk o.ä.).
Kurze Frage zu Netzwerken, denn so kann ich den Client auf Fehler überprüfen:

Kennt Ihr einen Hostnamen für den Port 7 (Echo)? Bei "localhost" kann sich der Client bei mir nicht verbinden (Exception.getMessage()=="Verbindungsaufbau abgelehnt").
Welchen Hostnamen also?
 
Zuletzt bearbeitet:

arilou

Bekanntes Mitglied
// keine Problemlösung, nur Anmerkung //

Du scheinst die Thread-Kommunikation über die beiden

[Receiver] private volatile String buffer="";

sowie

[Transmitter] private volatile String buffer="";

durchzuführen, was v.a. einen 'atomic' Zugriff sicherstellt - aber nicht verhindert, dass evtl. mehrfach in den buffer geschrieben (und überschrieben) wird, bevor er gelesen wird (in seiner letzte Version). So können Inhalte verlorengehen. Besser wäre eine ArrayList<String> als (FIFO-)Warteschlange.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Regex: Ich stehe auf dem Schlauch Allgemeine Java-Themen 2
V Comparator (steh wohl aufm Schlauch) Allgemeine Java-Themen 12
R String.split - ich steh auf dem Schlauch. Allgemeine Java-Themen 3
W Socket.setSoTimeout -> BufferedReader -> Default value Allgemeine Java-Themen 4
kodela Unterschiedliches Verhalten von BufferedReader Allgemeine Java-Themen 3
D BufferedReader bricht nach 1248 Iterationen ab Allgemeine Java-Themen 14
C BufferedReader/BufferedWriter schreibt nicht alle Bytes Allgemeine Java-Themen 2
C TCP Server und BufferedReader Leerstring im Stream? Allgemeine Java-Themen 5
A BufferedReader ohne System.in Allgemeine Java-Themen 9
J BufferedReader Datei einlesen Allgemeine Java-Themen 8
Messoras Der BufferedReader mag mich nicht Allgemeine Java-Themen 47
C Threading mit BufferedReader/InputStream & sockets Allgemeine Java-Themen 0
J BufferedReader OutOfMemory umgehen? Allgemeine Java-Themen 10
B Input/Output BufferedReader Allgemeine Java-Themen 3
O BufferedReader von ganz unten anfangen zu lesen Allgemeine Java-Themen 7
S BufferedReader/PrintWriter an einer HTML Allgemeine Java-Themen 6
M BufferedReader: Vom Logfile zur Datenbank Allgemeine Java-Themen 6
S Null Pointer Exception bei BufferedReader Allgemeine Java-Themen 4
K BufferedReader.readLine erkennt Zeilenende nicht Allgemeine Java-Themen 11
D 'InputStreamReader' & 'BufferedReader' führen zu "cannot find symbol"-Fehler Allgemeine Java-Themen 3
D Scanner leer aber bufferedReader nicht?! Allgemeine Java-Themen 2
A bufferedReader readline, encoding Allgemeine Java-Themen 5
V wie bufferedreader.readline() unterbrechen? Allgemeine Java-Themen 4
Developer_X Java BufferedReader mit URL Allgemeine Java-Themen 5
D BufferedREader#readLine Allgemeine Java-Themen 20
Semox Fehler - Zuweisung aus BufferedReader an Variable Allgemeine Java-Themen 3
S Exception beim BufferedReader Allgemeine Java-Themen 3
J BufferedReader br.readLine(); Allgemeine Java-Themen 22
G getFilePointer in BufferedReader? Allgemeine Java-Themen 2
D (BufferedReader) inLine() "verschluckt" zeilen ? Allgemeine Java-Themen 2
M BufferedReader.read(char[] cbuf) liefert falsche Werte? Allgemeine Java-Themen 4
W Frage zu BufferedReader Allgemeine Java-Themen 2
conan2 BufferedReader.readLine() von anderem Thread aus beenden Allgemeine Java-Themen 4
K Wie kann ich einen BufferedReader beschleunigen? Allgemeine Java-Themen 4
N readLine() von BufferedReader hält das Programm fest/auf! Allgemeine Java-Themen 10
B while mit BufferedReader beenden Allgemeine Java-Themen 5
F Zu große Werte beim byteweisen Lesen mit BufferedReader.read Allgemeine Java-Themen 5
S BufferedReader problem Allgemeine Java-Themen 11
D BufferedReader in image umwandeln Allgemeine Java-Themen 3
M BufferedReader input - hängt sich auf Allgemeine Java-Themen 4
C Probleme mit URL und BufferedReader Allgemeine Java-Themen 6
C BufferedReader oder DataInputStream Allgemeine Java-Themen 4
M Store a String in a BufferedReader Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben