Hallo an alle Javainteressierte,
habe ein einfaches Chat-Programm mit einem Server und beliebg vielen Clients erstellt. Nun habe ich auch dem Server ein GUI verpasst, welches startet aber erst auf Knopfdruck (JButton) den Server starten soll (das heißt nach Knopfdruck erst den Socketaufbau bewerkstelligt).
Leider stellt sich der Server (das GUI) hin, die Funktionalität ist jedoch unbeeinträchtigt. Der Quellcode kommt hier (braucht ihr den Client auch?):
Weiß jemand warum der Server hinsteht? Dank Euch im vorraus!
habe ein einfaches Chat-Programm mit einem Server und beliebg vielen Clients erstellt. Nun habe ich auch dem Server ein GUI verpasst, welches startet aber erst auf Knopfdruck (JButton) den Server starten soll (das heißt nach Knopfdruck erst den Socketaufbau bewerkstelligt).
Leider stellt sich der Server (das GUI) hin, die Funktionalität ist jedoch unbeeinträchtigt. Der Quellcode kommt hier (braucht ihr den Client auch?):
Weiß jemand warum der Server hinsteht? Dank Euch im vorraus!
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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.net.SocketException;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Server{
/* JFrame serverFrame;
JPanel serverPanel;
JTextArea textArea_Info;
JButton button_On;
JButton button_Off;
JScrollPane scrollPane_Info;*/
static ServerSocket server;
static ArrayList<PrintWriter> list_clientWriter;
final int LEVEL_ERROR = 1;
final int LEVEL_NORMAL = 0;
private PrintWriter textArea_Info;
public static void main(String[] args){
System.setProperty("file.encoding", "UTF-8");
Locale.setDefault(Locale.GERMAN);
//System.out.println(Locale.getDefault());
Server s = new Server();
s.createGUI();
/*if (s.runServer()) {
s.listenToClients();
} else {
// Do nothing
}*/
}
public void createGUI(){
JFrame serverFrame = new JFrame("ServerGUI");
serverFrame.setSize(800, 600);
JPanel serverPanel = new JPanel();
JTextArea textArea_Info = new JTextArea();
textArea_Info.setEditable(false);
textArea_Info.setSize(700, 500);
textArea_Info.setLocation(40, 50);
JButton button_On = new JButton("Server starten!");
JButton button_Off = new JButton("Server stoppen!");
button_On.addActionListener(new ServerOn());
button_Off.addActionListener(new ServerOff());
JScrollPane scrollPane_Info = new JScrollPane(textArea_Info);
scrollPane_Info.setPreferredSize(new Dimension(700, 500));
scrollPane_Info.setMinimumSize(new Dimension(700, 500));
scrollPane_Info.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane_Info.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
serverPanel.add(scrollPane_Info);
//serverPanel.add(textArea_Info);
serverPanel.add(button_On);
serverPanel.add(button_Off);
serverFrame.getContentPane().add(BorderLayout.CENTER, serverPanel);
serverFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
serverFrame.setVisible(true);
}
public class ServerOn implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
runServer();
// if(runServer()){
listenToClients();
// }else{
// };
}
}
public class ServerOff implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//serverFrame.dispose(); //GUI weg
stopServer();
}
}
public boolean stopServer(){
try {
server.close();
// aTM("Server Socket geschlossen");
return true;
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
}
/* public void aTM(String message) {
textArea_Info.append(message + "\n");
}*/
public class ClientHandler implements Runnable {
Socket client;
BufferedReader reader;
public ClientHandler(Socket client) {
try {
this.client = client;
reader = new BufferedReader(new InputStreamReader(client.getInputStream(),"UTF-8"));
} 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 (SocketException s) {
//s.printStackTrace();
//System.out.println(this.client +"\n" +"Hat Verbindung getrennt!" +"\n");
//aTM(this.client +"\n" +"Hat Verbindung getrennt!" +"\n");
}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();
System.out.println(client +"\n" +"Hat sich Verbunden!" +"\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}
public boolean runServer() {
try {
server = new ServerSocket(50000);
appendTextToConsole("Server wurde gestartet!", LEVEL_ERROR);
//aTM("Server wurde gestartet!");
list_clientWriter = new ArrayList<PrintWriter>();
return true;
} catch (IOException e) {
appendTextToConsole("Server konnte nicht gestartet werden!", LEVEL_ERROR);
//aTM("Server konnte nicht gestartet werden!");
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<PrintWriter> it = list_clientWriter.iterator();
while (it.hasNext()) {
PrintWriter writer = (PrintWriter) it.next();
//writer.format(Locale.GERMANY, "UTF-8", null);
writer.println(message);
writer.flush();
}
}
}
Zuletzt bearbeitet von einem Moderator: