Hey Leute,
Ich bin ein wirklicher Anfänger in Java bin keine Woche dabei doch habe es anhand eines video geschafft einen kleine Chat zu basteln.
Kommen wir zum Problem, ich habe momentan nur zwei classen eine Server.java und ein Client.java
wenn ich die so ausführe funktioniert alles ich komme so gesagt sofort ins Fenster wo ich nachrichten schreiben kann allerdings möchte ich bevor es dazu kommt das ein Fenster auftaucht wo mann sich z.b ein Benutzername aussucht und wenn man dann auf weiter klickt das mann zum Chat weiter geleitet wird.
Kann mir bitte einer helfen ich kenne mich noch nicht so gut aus damit.
und selbst wenn ich denn Command wüste wo sollte ich ihn dann rein schreiben in die Server.java oder in den Client.java




Server.java:
Client.java:
Ich bin ein wirklicher Anfänger in Java bin keine Woche dabei doch habe es anhand eines video geschafft einen kleine Chat zu basteln.
Kommen wir zum Problem, ich habe momentan nur zwei classen eine Server.java und ein Client.java
wenn ich die so ausführe funktioniert alles ich komme so gesagt sofort ins Fenster wo ich nachrichten schreiben kann allerdings möchte ich bevor es dazu kommt das ein Fenster auftaucht wo mann sich z.b ein Benutzername aussucht und wenn man dann auf weiter klickt das mann zum Chat weiter geleitet wird.
Kann mir bitte einer helfen ich kenne mich noch nicht so gut aus damit.
und selbst wenn ich denn Command wüste wo sollte ich ihn dann rein schreiben in die Server.java oder in den Client.java
Server.java:
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;
public class Server {
ServerSocket server;
ArrayList<PrintWriter> list_clientWriter;
final int LEVEL_ERROR = 1;
final int LEVEL_NORMAL = 0;
public static void main(String[] args) {
Server s = new Server();
if (s.runServer()) {
s.listenToClients();
} else {
// Do nothing
}
}
public class ClientHandler implements Runnable {
Socket client;
BufferedReader reader;
public ClientHandler(Socket client) {
try {
this.client = client;
reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
String nachricht;
try {
while((nachricht = reader.readLine()) != null) {
appendTextToConsole("Vom Client: \n" + nachricht, LEVEL_NORMAL);
sendToAllClients(nachricht);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void listenToClients() {
while(true) {
try {
Socket client = server.accept();
PrintWriter writer = new PrintWriter(client.getOutputStream());
list_clientWriter.add(writer);
Thread clientThread = new Thread(new ClientHandler(client));
clientThread.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public boolean runServer() {
try {
server = new ServerSocket(5555);
appendTextToConsole("Server wurde gestartet!", LEVEL_ERROR);
list_clientWriter = new ArrayList<PrintWriter>();
return true;
} catch (IOException e) {
appendTextToConsole("Server konnte nicht gestartet werden!", LEVEL_ERROR);
e.printStackTrace();
return false;
}
}
public void appendTextToConsole(String message, int level) {
if(level == LEVEL_ERROR) {
System.err.println(message + "\n");
} else {
System.out.println(message + "\n");
}
}
public void sendToAllClients(String message) {
Iterator it = list_clientWriter.iterator();
while(it.hasNext()) {
PrintWriter writer = (PrintWriter) it.next();
writer.println(message);
writer.flush();
}
}
}
Client.java:
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
public class Client {
JFrame clientFrame;
JPanel clientPanel;
JTextArea textArea_Messages;
JTextField textField_ClientMessage;
JButton button_SendMessage;
JTextField textField_Username;
JScrollPane scrollPane_Messages;
Socket client;
PrintWriter writer;
BufferedReader reader;
public static void main(String[] args) {
Client c = new Client();
c.createGUI();
}
public void createGUI() {
clientFrame = new JFrame("TutCubeDE-Chat");
clientFrame.setSize(800, 600);
// Panel erzeugen, welches alle anderen Inhalte enthält
clientPanel = new JPanel();
textArea_Messages = new JTextArea();
textArea_Messages.setEditable(false);
textField_ClientMessage = new JTextField(38);
textField_ClientMessage.addKeyListener(new SendPressEnterListener());
button_SendMessage = new JButton("Senden");
button_SendMessage.addActionListener(new SendButtonListener());
textField_Username = new JTextField(10);
// Scrollbalken zur textArea hinzufügen
scrollPane_Messages = new JScrollPane(textArea_Messages);
scrollPane_Messages.setPreferredSize(new Dimension(700, 500));
scrollPane_Messages.setMinimumSize(new Dimension(700, 500));
scrollPane_Messages.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane_Messages.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
if(!connectToServer()) {
// Connect-Label anzeigen ob verbunden oder nicht...
}
Thread t = new Thread(new MessagesFromServerListener());
t.start();
clientPanel.add(scrollPane_Messages);
clientPanel.add(textField_Username);
clientPanel.add(textField_ClientMessage);
clientPanel.add(button_SendMessage);
// Panel zum ContentPane (Inhaltsbereich) hinzufügen
clientFrame.getContentPane().add(BorderLayout.CENTER, clientPanel);
clientFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
clientFrame.setVisible(true);
}
public boolean connectToServer() {
try {
client = new Socket("127.0.0.1", 5555);
reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
writer = new PrintWriter(client.getOutputStream());
appendTextMessages("Netzwerkverbindung hergestellt");
return true;
} catch(Exception e) {
appendTextMessages("Netzwerkverbindung konnte nicht hergestellt werden");
e.printStackTrace();
return false;
}
}
public void sendMessageToServer() {
writer.println(textField_Username.getText() + ": " + textField_ClientMessage.getText());
writer.flush();
textField_ClientMessage.setText("");
textField_ClientMessage.requestFocus();
}
public void appendTextMessages(String message) {
textArea_Messages.append(message + "\n");
}
// Listener
public class SendPressEnterListener implements KeyListener {
@Override
public void keyPressed(KeyEvent arg0) {
if(arg0.getKeyCode() == KeyEvent.VK_ENTER) {
sendMessageToServer();
}
}
@Override
public void keyReleased(KeyEvent arg0) {}
@Override
public void keyTyped(KeyEvent arg0) {}
}
public class SendButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
sendMessageToServer();
}
}
public class MessagesFromServerListener implements Runnable {
@Override
public void run() {
String message;
try {
while((message = reader.readLine()) != null) {
appendTextMessages(message);
textArea_Messages.setCaretPosition(textArea_Messages.getText().length());
}
} catch (IOException e) {
appendTextMessages("Nachricht konnte nicht empfangen werden!");
e.printStackTrace();
}
}
}
}
Zuletzt bearbeitet: