Hallo Leute,
ich habe eine kleine Applikation die mit einem Server über das Netzwerk kommuniziert.
Nur leider bekomme ich das nicht hin, dass wenn ich den Login starte, dass er mir die Fehler ausblendet und das Panel wait anzeigt.
Meine beiden Klassen sehen wie folgt aus:
Client.java
ClientApplet.java
Ich habe schon mehrere Sachen ausprobiert in der Funktion warten unter anderem EventQueue, SwingUtilities und worker.
Leider alles ohne Erfolg.
Ich wäre auch über Tipps dankbar, die eine konstruktive Kritik an dem Aufbau der Klassen äußern.
Also postet alles raus was ihr denkt, ich bin für alles dankbar.
Danke im Vorraus.
ich habe eine kleine Applikation die mit einem Server über das Netzwerk kommuniziert.
Nur leider bekomme ich das nicht hin, dass wenn ich den Login starte, dass er mir die Fehler ausblendet und das Panel wait anzeigt.
Meine beiden Klassen sehen wie folgt aus:
Client.java
Java:
package Client2;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class Client implements Runnable
{
ClientApplet ca;
// Components for the visual display of the chat windows
// The socket connecting us to the server
private Socket socket;
// The streams we communicate to the server; these come
// from the socket
private DataOutputStream dout;
private DataInputStream din;
private boolean fertig;
boolean verbunden;
public void exit()
{
try
{
if(this.socket.isConnected()==true)
{
this.socket.close();
}
}
catch (Exception e)
{
}
System.out.println("Verbindung beendet");
}
// Constructor
public Client(String host, int port,ClientApplet ca)
{
this.ca = ca;
BufferedReader in = new BufferedReader (new InputStreamReader(System.in));
String eingabe;
this.verbunden = false;
// Connect to the server
try
{
// Initiate the connection
socket = new Socket(host, port);
this.verbunden = true;
// We got a connection! Tell the world
System.out.println("connected to " + socket);
// Let's grab the streams and create DataInput/Output streams
// from them
din = new DataInputStream(socket.getInputStream());
dout = new DataOutputStream(socket.getOutputStream());
// Start a background thread for receiving messages
new Thread(this).start();
/*while(this.fertig==false)
{
eingabe = in.readLine();
if("exit".equals(eingabe))
{
this.socket.close();
fertig = true;
}
else
{
this.processMessage(eingabe);
}
} */
}
catch (IOException ie)
{
//System.out.println(ie);
}
}
// Gets called when the user types something
private void processMessage(String message)
{
try {
// Send it to the server
dout.writeUTF(message);
}
catch (Exception ie)
{
//System.out.println(ie);
}
}
public void senden(String zumSenden)
{
if(!("".equals(zumSenden)))
{
this.processMessage(zumSenden);
}
}
// Background thread runs this: show messages from other window
public void run()
{
try
{
// Receive messages one-by-one, forever
while (true) {
// Get the next message
String message = din.readUTF();
System.out.println(message);
this.ca.setMessage(message);
}
}
catch (IOException ie)
{
//System.out.println(ie);
}
}
}
ClientApplet.java
Java:
package Client2;
import java.awt.*;
import java.awt.event.*;
import java.lang.reflect.InvocationTargetException;
import java.sql.Timestamp;
import java.util.Date.*;
import javax.swing.*;
import sun.security.jca.GetInstance.Instance;
public class ClientApplet extends JFrame implements ActionListener//,Runnable
{
private static ClientApplet instance = null ;
private JPanel login;
private JPanel eingabe;
private JPanel wait;
private Client client;
private JLabel status;
private JLabel warten;
private JTextField username;
private JPasswordField password;
private JButton enter;
private JButton reset;
private JTextField betreff;
private JTextArea nachricht;
private JButton senden;
private boolean timeout;
boolean verbunden;
String vomServer;
public void exit()
{
this.client.exit();
}
public ClientApplet()
{
super("Notizsystem");
this.vomServer = new String();
this.setDefaultCloseOperation(0);
WindowListener wl = new WindowListener();
wl.setSource(this);
this.addWindowListener(wl);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
int heigth = 600;
int width = 800;
this.setLayout(null);
this.generateLogin();
this.generateWait();
this.generateEingabe();
this.setBounds(x-width/2,y-heigth/2,width,heigth);
this.setResizable(false);
this.add(this.login);
//pack();
}
public void generateLogin()
{
this.login = new JPanel();
this.login.setSize(800,600);
this.username = new JTextField();
this.password = new JPasswordField();
this.enter = new JButton("Login");
this.reset = new JButton("Reset");
JLabel text1 = new JLabel("Name:");
JLabel text2 = new JLabel("Passwort:");
this.login.setLayout(null);
this.enter.setActionCommand("Login");
this.enter.addActionListener(this);
this.reset.setActionCommand("Reset");
this.reset.addActionListener(this);
this.status = new JLabel("");
text1.setBounds(300,200,90,25);
text2.setBounds(400,200,90,25);
this.username.setBounds(300,225,90,30);
this.password.setBounds(400,225,90,30);
this.enter.setBounds(300,260,90,30);
this.reset.setBounds(400,260,90,30);
this.status.setBounds(300, 300, 200, 15);
this.login.add(text1);
this.login.add(text2);
this.login.add(this.username);
this.login.add(this.password);
this.login.add(this.enter);
this.login.add(this.reset);
this.login.add(this.status);
}
public void generateWait()
{
this.wait = new JPanel();
this.wait.setLayout(null);
this.wait.setSize(800,600);
this.warten = new JLabel("Bitte Warten...");
this.warten.setBounds(350,275,100,15);
this.wait.add(this.warten);
}
public void generateEingabe()
{
this.eingabe = new JPanel();
this.eingabe.setSize(800,600);
this.eingabe.setLayout(null);
}
public static void main(String[] args)
{
ClientApplet applet = new ClientApplet();
applet.setVisible(true);
}
public void warten()
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
login.setVisible(false);
remove(login);
add(wait);
repaint();
}
});
try
{
Thread.currentThread();
Thread.sleep(5000);
}
catch (InterruptedException e)
{
}
this.timeout=false;
//new Thread(this).start();
while( !("state=loggedIn".equals(this.vomServer)) &&timeout==false )
{}
if(this.timeout==true)
{
this.status.setText("Timeout");
this.wait.setVisible(false);
this.login.setVisible(true);
}
else
{
this.warten.setText("Verbunden");
this.wait.setVisible(false);
this.add(this.eingabe);
}
this.repaint();
}
public void actionPerformed(ActionEvent ae)
{
if("Login".equals(ae.getActionCommand()))
{
if(!("".equals(this.username.getText())))
{
this.client = new Client("192.168.0.114",1234,this);
if(this.client.verbunden==true)
{
this.verbunden = true;
this.client.senden("state=login");
this.client.senden("username="+this.username.getText());
this.client.senden("password="+ new String(this.password.getPassword()));
this.client.senden("EoM");
this.warten();
}
else
{
this.status.setText("Server nicht erreichbar");
}
}
}
if("Reset".equals(ae.getActionCommand()))
{
this.username.setText("");
this.password.setText("");
}
}
public void setGUI()
{
this.login.setVisible(false);
this.add(this.wait);
this.repaint();
}
public void setMessage(String message)
{
this.vomServer = message;
}
}
Ich habe schon mehrere Sachen ausprobiert in der Funktion warten unter anderem EventQueue, SwingUtilities und worker.
Leider alles ohne Erfolg.
Ich wäre auch über Tipps dankbar, die eine konstruktive Kritik an dem Aufbau der Klassen äußern.
Also postet alles raus was ihr denkt, ich bin für alles dankbar.
Danke im Vorraus.