Hallo VfL_Frank,
danke schon mal für deine Antwort.
Mein Code steht weiter unten.... Das komische ist, dass ich überhaupt keine Fehlermeldung erhalte...:bahnhof:
Wie bereits gesagt, ist es etwas mehr an Codezeilen... Beim Client in Zeile 289ff. sollte die Nachricht in den TextArea angegeben werden. Die Konsolenausgaben geht einwandfrei...
Client:
[Java]
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.ScrollPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.i
bjectInputStream;
import java.i
bjectOutputStream;
import java.io.PrintWriter;
import java.io.StringReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import javax.swing.text.BadLocationException;
import javax.swing.text.html.HTMLEditorKit;
public class Client {
JLabel label = new JLabel(
"Chat f\u00FCr Rechnerkommunikation - SS 2014 - Client");
JLabel label_1 = new JLabel("Server-IP:");
JLabel lblServerIP = new JLabel("ip-adresse");
JLabel Label_2 = new JLabel("Eigene-IP:");
JLabel lblEigeneIP = new JLabel("ip-adresse");
JLabel label_5 = new JLabel("zur Zeit online:");
JTextArea listOnline = new JTextArea();
JLabel lblMeinNickname = new JLabel("Mein Nickname:");
JLabel lblNickname = new JLabel("Nickname");
JList listKanal = new JList();
JLabel lblMeineKanle = new JLabel("Meine Kan\u00E4le:");
JLabel label5 = new JLabel("Status:");
JLabel lblStatus = new JLabel("offline");
JTextArea listChatAlle = new JTextArea();
JTextArea txtMeinTXT = new JTextArea();
JLabel lblChatMitAllen = new JLabel("Chat mit allen:");
JButton senden = new JButton("Abschicken");
JTextArea txtLogBuch = new JTextArea();
JLabel lblLogbuch = new JLabel("LogBuch:");
ArrayList<String> Nachricht;
JScrollPane scrollPaneChat = new JScrollPane(listChatAlle);
JScrollPane scrollPaneText = new JScrollPane(txtMeinTXT);
JScrollPane scrollPaneLog = new JScrollPane(txtLogBuch);
Socket client;
public DataOutputStream NachrichtRaus;
public DataInputStream NachrichtRein;
public static void main(String[] args) {
Client c = new Client();
c.erstellenGUI();
}
public void erstellenGUI() {
JFrame frameclient = new JFrame();
JPanel panelclient = new JPanel();
JMenuBar menuBar = new JMenuBar();
JMenu aktion = new JMenu("Aktion");
JMenu channel = new JMenu("Kanal");
JMenu exit = new JMenu("Beenden");
JMenuItem verbinden = new JMenuItem("Verbinden");
verbinden.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
verbindenmitserver();
}
});
JMenuItem trennen = new JMenuItem("Trennen");
JMenuItem channelNeu = new JMenuItem("Neuen Kanal");
JMenuItem channelbeitreten = new JMenuItem("Kanal beitreten");
JMenuItem channelloeschen = new JMenuItem("Kanal entfernen");
JMenuItem beenden = new JMenuItem("Beenden");
aktion.add(verbinden);
aktion.add(trennen);
channel.add(channelNeu);
channel.add(channelbeitreten);
channel.add(channelloeschen);
exit.add(beenden);
menuBar.add(aktion);
menuBar.add(channel);
menuBar.add(exit);
panelclient.setLayout(null);
label.setForeground(Color.DARK_GRAY);
label.setFont(new Font("Tahoma", Font.BOLD, 16));
label.setBounds(10, 11, 505, 36);
panelclient.add(label);
label_1.setForeground(Color.BLUE);
label_1.setBounds(373, 346, 99, 21);
panelclient.add(label_1);
lblServerIP.setForeground(Color.DARK_GRAY);
lblServerIP.setBounds(482, 346, 99, 21);
panelclient.add(lblServerIP);
Label_2.setForeground(Color.BLUE);
Label_2.setBounds(373, 291, 99, 21);
panelclient.add(Label_2);
lblEigeneIP.setForeground(Color.DARK_GRAY);
lblEigeneIP.setBounds(482, 291, 99, 21);
panelclient.add(lblEigeneIP);
label_5.setForeground(Color.BLUE);
label_5.setBounds(610, 58, 84, 21);
panelclient.add(label_5);
listOnline.setForeground(Color.DARK_GRAY);
listOnline.setBounds(610, 90, 162, 323);
panelclient.add(listOnline);
lblMeinNickname.setForeground(Color.BLUE);
lblMeinNickname.setBounds(373, 166, 99, 21);
panelclient.add(lblMeinNickname);
lblNickname.setForeground(Color.DARK_GRAY);
lblNickname.setBounds(482, 166, 99, 21);
panelclient.add(lblNickname);
listKanal.setForeground(Color.DARK_GRAY);
listKanal.setBounds(798, 90, 162, 323);
panelclient.add(listKanal);
lblMeineKanle.setForeground(Color.BLUE);
lblMeineKanle.setBounds(798, 58, 84, 21);
panelclient.add(lblMeineKanle);
label5.setForeground(Color.BLUE);
label5.setBounds(373, 223, 99, 21);
panelclient.add(label5);
lblStatus.setForeground(Color.DARK_GRAY);
lblStatus.setBounds(482, 223, 99, 21);
panelclient.add(lblStatus);
listChatAlle.setBounds(20, 90, 312, 323);
scrollPaneChat.setBounds(20, 90, 312, 323);
listChatAlle.setLineWrap(true);
listChatAlle.setWrapStyleWord(true);
scrollPaneChat.setViewportView(listChatAlle);
panelclient.add(scrollPaneChat);
txtMeinTXT.setBounds(20, 424, 312, 65);
scrollPaneText.setBounds(20, 424, 312, 65);
txtMeinTXT.setLineWrap(true);
txtMeinTXT.setWrapStyleWord(true);
panelclient.add(scrollPaneText);
scrollPaneText.setViewportView(txtMeinTXT);
lblChatMitAllen.setForeground(Color.BLUE);
lblChatMitAllen.setBounds(20, 58, 99, 21);
panelclient.add(lblChatMitAllen);
txtLogBuch.setBounds(610, 435, 350, 65);
scrollPaneLog.setBounds(610, 435, 350, 65);
txtLogBuch.setLineWrap(true);
txtLogBuch.setWrapStyleWord(true);
panelclient.add(scrollPaneLog);
scrollPaneLog.setViewportView(txtLogBuch);
lblLogbuch.setForeground(Color.BLUE);
lblLogbuch.setBounds(508, 429, 99, 21);
panelclient.add(lblLogbuch);
senden.setBounds(352, 448, 106, 23);
panelclient.add(senden);
senden.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
nachrichtsenden();
} catch (IOException e) {
e.printStackTrace();
}
}
});
frameclient.setVisible(true);
panelclient.setVisible(true);
frameclient.setJMenuBar(menuBar);
frameclient.setSize(1000, 600);
// Panel zum ContentPane (Inhaltsbereich) hinzufügen
frameclient.getContentPane().add(BorderLayout.CENTER, panelclient);
frameclient.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frameclient.setVisible(true);
}
public void verbindenmitserver() {
String LoginNachricht;
try {
lblServerIP.setText(JOptionPane
.showInputDialog("Server-IP eingeben: "));
lblNickname.setText(JOptionPane
.showInputDialog("Nickname eingeben: "));
lblEigeneIP.setText(InetAddress.getLocalHost().getHostAddress()
.toString());
String serverIP = lblServerIP.getText();
client = new Socket(serverIP, 3311);
NachrichtRein = new DataInputStream(client.getInputStream());
NachrichtRaus = new DataOutputStream(client.getOutputStream());
LoginNachricht = ("Anmeldung" + "!!" + lblNickname.getText() + "!!"
+ "Server" + "!!" + "Login Erfolgreich");
// System.out.println(LoginNachricht+" gesendet");
NachrichtRaus.writeUTF(LoginNachricht);
NachrichtRaus.flush();
Thread t = new Thread(new ClientThreads(client));
// ClientThreads ct = new ClientThreads(client);
t.start();
txtLogBuch.append("Netzwerkverbindung hergestellt\n");
lblStatus.setText("Verbunden");
listChatAlle.append("Test geht");
} catch (Exception e) {
txtLogBuch.append("Netzwerkverbindung konnte nicht hergestellt werden\n");
e.printStackTrace();
}
}
public void nachrichtsenden() throws IOException {
String Nachricht;
Nachricht = ("Nachricht" + "!!" + lblNickname.getText() + "!!" + "Alle"
+ "!!" + txtMeinTXT.getText());
// JOptionPane.showMessageDialog(null, Nachricht);
NachrichtRaus.writeUTF(Nachricht);
NachrichtRaus.flush();
txtMeinTXT.setText("");
txtMeinTXT.requestFocus();
}
public class nachrichtendekodieren{
public nachrichtendekodieren(String Nachricht){
String Absender, Empfänger, NachrichtenText, NachrichtenTyp;
listChatAlle.append(Nachricht);
if (Nachricht.contains("!!")) {
String[] nachrichtenteile = Nachricht.split("!!");
NachrichtenTyp = nachrichtenteile[0];
Absender = nachrichtenteile[1];
Empfänger = nachrichtenteile[2];
NachrichtenText = nachrichtenteile[3];
System.out.println(NachrichtenTyp + " " + Absender + " "+ Empfänger + " " + NachrichtenText);
if (NachrichtenTyp.equals("Nachricht") && Empfänger.equals("Alle")) {
System.out.println("Nachricht");
listChatAlle.append(Absender + ":" + NachrichtenText + "\n");
}
if ((NachrichtenTyp.equals("Anmeldung")) && (Absender != lblNickname.getText())) {
listOnline.append(Absender + "\n");
System.out.println("Anmeldung-fremd");
}
if (NachrichtenTyp.equals("Anmeldung") && Absender.equals(lblNickname.getText())) {
// System.out.println("normal steht das im Logbuch!! "+NachrichtenText);
txtLogBuch.append(NachrichtenText + "\n");
System.out.println("Anmeldung - eigen");
}
}
}
}
}
[/Java]
Der ClientThread
[Java]
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JOptionPane;
public class ClientThreads extends Client implements Runnable {
public DataInputStream NachrichtRein;
private Socket client;
private JButton btnnachrichtweiter;
public ClientThreads(Socket client) throws IOException {
this.client = client;
NachrichtRein = new DataInputStream(client.getInputStream());
}
public void run() {
String nachricht = null;
while (true) {
try {
nachricht = NachrichtRein.readUTF();
// System.out.println(nachricht);
if (nachricht != null) {
listChatAlle.append(nachricht+"von der Thread");
new nachrichtendekodieren(nachricht);
// JOptionPane.showMessageDialog(null, nachricht, null, 0);
}
} catch (NullPointerException e) {
e.printStackTrace();
// JOptionPane.showMessageDialog(null,
// "NullPointException"+nachricht, null, 0);
} catch (IOException e) {
e.printStackTrace();
// JOptionPane.showMessageDialog(null, "IOException", null, 0);
}
}
}
}
[/Java]