Hallo Leute,
ich stehe gerade auf dem Schlauch bei einem Problem mit dem Update der Oberfläche eines
kleinen Servers (Tipp des Tages). Dabei versuche ich in einer Schleife ein JTextField und eine
JTextArea zu aktualisieren (siehe Code). Obwohl das natürlich keine sehr gute Idee ist, würde
ich das Ganze gerne so zum Laufen bringen. Natürlich gibt es dabei das Problem der Blockade
des EDT. Ich habe bereits versucht, das Problem zu beheben mittels eines Timers bzw eines
separaten Threads (siehe Kommentare), aber nichts funktioniert. Es sollen in einem JTextField
die IP-Adresse des Servers und in der JTextArea Ip-Adresse und Portnummer aller verbundenen
Clients eingetragen werden. Da ich schon einige Jahre aus der Java-Programmierung raus bin,
wäre ich für jede Hilfe dankbar.
Hier der Code des Servers, der über eine GUI aufgerufen wird und Referenzen zu
jTextField und JTextArea mitbekommt. Ich hoffe, es ist okay wenn ich den Code hier einfach anhänge.
Da ich noch nie in einem Forum gepostet habe, besitze ich keinerlei Erfahrung. Sollte der modus
operandi ein anderer sein, bite ich um entsprechende Hinweise:
[CODE lang="java" title="Einfacher Server"]package mypackage;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import javax.swing.Timer;
public class server {
InetAddress ip;
String hostname;
int port;
Socket sock;
String[] tippListe={"Weniger Süßigkeiten essen!","Kaufen Sie sich was schönes!","Sagen Sie heute die Wahrheit","Mehr Programmieren Üben!","Knuddeln Sie Ihren Partner!"};
public void los(int port,JTextField tfip,JTextArea tacl)
{
try
{
ServerSocket servsock = new ServerSocket(port); // Verbindungsschnittstelle auf Port 4243 erstellen
while(true)
{
System.out.println("Hallo hier ist der Server auf Port " + port);
sock = servsock.accept(); // Warten auf "Anruf" von einem Client. accept() blockiert bis ein Client "anruft"
PrintWriter writer = new PrintWriter(sock.getOutputStream()); // Ausgabedatenleitung zum Clientsocket aufbauen...
String tipp = getTipp();
writer.println(tipp); // ... und die Daten an den Client senden
ip = InetAddress.getLocalHost(); // IP Adresse des Servers ermitteln
hostname = ip.getHostName();
// timer = new javax.swing.Timer(5,new ActionListener(){
// public void actionPerformed(ActionEvent ae){
// tfip.setText(ip.toString());
// tacl.append(" Clientadresse: " + sock.getInetAddress().toString() + " Portnummer: "+ sock.getPort() + System.lineSeparator());
// }
// });
// if (!timer.isRunning())
// {
// timer.start();
// System.out.println("Timer gestartet");
// }
//----------------------------------------------------------------
// new Thread(new Runnable()
// {
// public void run()
// {
//
// SwingUtilities.invokeLater(new Runnable()
// {
//
// public void run()
// {
// tfip.setText(ip.toString());
// tacl.append(" Clientadresse: " + sock.getInetAddress().toString() + " Portnummer: "+ sock.getPort() + System.lineSeparator());
// System.out.println("Komponenten aktualisiert!");
// }
// });
//
// }
// }).start();
tfip.setText(ip.toString());
tacl.append(" Clientadresse: " + sock.getInetAddress().toString() + " Portnummer: "+ sock.getPort() + System.lineSeparator());
System.out.println( "Text aus Textfeld und Textarea: " + tfip.getText() + " " + tacl.getText());
//System.out.println(ip + "\t" + hostname);
//System.out.println("Clientadresse: " + sock.getInetAddress() + " Portnummer: "+ sock.getPort());
writer.close(); // Ausgabedatenleitung wieder schließen
//servsock.close();
sock.close();
System.out.println(tipp);
}
}
catch (IOException ex){ex.printStackTrace();}
}
private String getTipp()
{
int zufall = (int)(Math.random()*tippListe.length);
return tippListe[zufall];
}
}
[/CODE]
ich stehe gerade auf dem Schlauch bei einem Problem mit dem Update der Oberfläche eines
kleinen Servers (Tipp des Tages). Dabei versuche ich in einer Schleife ein JTextField und eine
JTextArea zu aktualisieren (siehe Code). Obwohl das natürlich keine sehr gute Idee ist, würde
ich das Ganze gerne so zum Laufen bringen. Natürlich gibt es dabei das Problem der Blockade
des EDT. Ich habe bereits versucht, das Problem zu beheben mittels eines Timers bzw eines
separaten Threads (siehe Kommentare), aber nichts funktioniert. Es sollen in einem JTextField
die IP-Adresse des Servers und in der JTextArea Ip-Adresse und Portnummer aller verbundenen
Clients eingetragen werden. Da ich schon einige Jahre aus der Java-Programmierung raus bin,
wäre ich für jede Hilfe dankbar.
Hier der Code des Servers, der über eine GUI aufgerufen wird und Referenzen zu
jTextField und JTextArea mitbekommt. Ich hoffe, es ist okay wenn ich den Code hier einfach anhänge.
Da ich noch nie in einem Forum gepostet habe, besitze ich keinerlei Erfahrung. Sollte der modus
operandi ein anderer sein, bite ich um entsprechende Hinweise:
[CODE lang="java" title="Einfacher Server"]package mypackage;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import javax.swing.Timer;
public class server {
InetAddress ip;
String hostname;
int port;
Socket sock;
String[] tippListe={"Weniger Süßigkeiten essen!","Kaufen Sie sich was schönes!","Sagen Sie heute die Wahrheit","Mehr Programmieren Üben!","Knuddeln Sie Ihren Partner!"};
public void los(int port,JTextField tfip,JTextArea tacl)
{
try
{
ServerSocket servsock = new ServerSocket(port); // Verbindungsschnittstelle auf Port 4243 erstellen
while(true)
{
System.out.println("Hallo hier ist der Server auf Port " + port);
sock = servsock.accept(); // Warten auf "Anruf" von einem Client. accept() blockiert bis ein Client "anruft"
PrintWriter writer = new PrintWriter(sock.getOutputStream()); // Ausgabedatenleitung zum Clientsocket aufbauen...
String tipp = getTipp();
writer.println(tipp); // ... und die Daten an den Client senden
ip = InetAddress.getLocalHost(); // IP Adresse des Servers ermitteln
hostname = ip.getHostName();
// timer = new javax.swing.Timer(5,new ActionListener(){
// public void actionPerformed(ActionEvent ae){
// tfip.setText(ip.toString());
// tacl.append(" Clientadresse: " + sock.getInetAddress().toString() + " Portnummer: "+ sock.getPort() + System.lineSeparator());
// }
// });
// if (!timer.isRunning())
// {
// timer.start();
// System.out.println("Timer gestartet");
// }
//----------------------------------------------------------------
// new Thread(new Runnable()
// {
// public void run()
// {
//
// SwingUtilities.invokeLater(new Runnable()
// {
//
// public void run()
// {
// tfip.setText(ip.toString());
// tacl.append(" Clientadresse: " + sock.getInetAddress().toString() + " Portnummer: "+ sock.getPort() + System.lineSeparator());
// System.out.println("Komponenten aktualisiert!");
// }
// });
//
// }
// }).start();
tfip.setText(ip.toString());
tacl.append(" Clientadresse: " + sock.getInetAddress().toString() + " Portnummer: "+ sock.getPort() + System.lineSeparator());
System.out.println( "Text aus Textfeld und Textarea: " + tfip.getText() + " " + tacl.getText());
//System.out.println(ip + "\t" + hostname);
//System.out.println("Clientadresse: " + sock.getInetAddress() + " Portnummer: "+ sock.getPort());
writer.close(); // Ausgabedatenleitung wieder schließen
//servsock.close();
sock.close();
System.out.println(tipp);
}
}
catch (IOException ex){ex.printStackTrace();}
}
private String getTipp()
{
int zufall = (int)(Math.random()*tippListe.length);
return tippListe[zufall];
}
}
[/CODE]