Brauche Hilfe beim fertigstellen eines Chat programms

Reloaded1994

Mitglied
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:
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:
Ich bin ein wirklicher Anfänger in Java bin keine Woche dabei doch habe es anhand eines video geschafft einen kleine Chat zu basteln.

Willkommen bei Java 🙂
Wie man Java lernt kommt auf die Person an, ob Video oder Buch oder Webseiten/PDFs ist egal (wobei ich von Videos nicht so viel halte). Das Problem sehe ich nur wenn man nicht mit den Grundlagen anfängt! Wie der Name schon sagt durch Grundlagen wird es dir möglich auch fremden Code zu verstehen ohne diese auszuführen.

Was sagen dir Begriffe wie Vererbung, abstrakte Methoden, Methodensignatur, Konstruktoren, ...?

Außerdem ist der Code der durch das Video vermittel zwar richtig, aber keine schöne Programmierung!

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

Naja :rtfm: ein Client läuft Clientseitig, der User/Client soll sich normalerweise einloggen, in welche Klasse sollte also der Code?

Bevor du dich mit GUI, Server/Client Sachen und Threading herumschlägst solltest du dir die Grundlagen aneignen und mit simplen Konsolenprogrammen anfangen ....
 
ich finde zum einstieg applets ganz nuetzlich, gerade für menschen die sich (noch) wenig unter dem programm an sich vorstellen können. da kann man dann sehr einfach über die paint methode eigene kreationen auf den bildschirm pinnen. Ich erinner mich noch wie mein lehrer mir als erstes die aufgabe gab ein schachbrett mit zwei for-schleifen zu basteln *_*
 
.... gerade für menschen die sich (noch) wenig unter dem programm an sich vorstellen können. da kann man dann sehr einfach über die paint methode eigene kreationen auf den bildschirm pinnen. ....

Und wenn man viele dieser Menschen dann fragt: Warum macht das Programm das und das, und warum wird diese paint-Methode aufgerufen etc. dann wissen viele nicht wie wann wo was warum.
In Mathematik fangt man auch nicht Differenzialgleichungen bzw. Wahrscheinlichkeitsrechnung an 😉
 
Hab das fester jetzt hinbekommen ( mehr oder weniger) und ihr habt recht zwar weis ich die befehle wie man ein Fenster erzeugt, allerdings warst das auch hab mir jetzt das buch Java ist auch eine Insel geholt und werde einfach anhand daran
erst mal lernen und sich mit kleineren Sachen beschäftigen


Danke für alle die so schnell geantwortet haben 😉
 
Zuletzt bearbeitet:

Zurück
Oben