Hallo,
ich hab einen Server der aller 2 Sekunden neue Werte ermittelt. Meine Aufgabe ist es, ein Programm zu erstellen, dass diese Werte abruft und ausgibt.
Die Kommunikation zwischen Server und Client funktioniert, aber ich weiß nicht, wie ich die Werte in mein TextArea bekomme.
Dann hat mir mein Programmier Prof. gesagt, dass die stop() Methode für Threads keine saubere Lösung sei und ich lieber ein interruped() implementieren soll. Aber wie mache ich das, wenn ich für den Client-Server-Kommunikationsthread eine eigene Klasse verwende?
Im Prinzip möchte ich beim betätigen des Buttons "Verbinden" einen Thread starten in dem sich der Client aller 2 Sekunden mit dem Server verbindet, die Werte abfragt und dann im Textarea ausgibt.
Klasse Client:
Meine Thread Klasse:
Ich danke euch schon mal für eure Hilfe.
LG
JimK
ich hab einen Server der aller 2 Sekunden neue Werte ermittelt. Meine Aufgabe ist es, ein Programm zu erstellen, dass diese Werte abruft und ausgibt.
Die Kommunikation zwischen Server und Client funktioniert, aber ich weiß nicht, wie ich die Werte in mein TextArea bekomme.
Dann hat mir mein Programmier Prof. gesagt, dass die stop() Methode für Threads keine saubere Lösung sei und ich lieber ein interruped() implementieren soll. Aber wie mache ich das, wenn ich für den Client-Server-Kommunikationsthread eine eigene Klasse verwende?
Im Prinzip möchte ich beim betätigen des Buttons "Verbinden" einen Thread starten in dem sich der Client aller 2 Sekunden mit dem Server verbindet, die Werte abfragt und dann im Textarea ausgibt.
Klasse Client:
Java:
package Client;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
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.OutputStream;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import org.omg.CORBA.portable.InputStream;
import Server.Server;
public class Client extends JFrame implements ActionListener {
MyJFrame panel = new MyJFrame(this);
JLabel statusBar = new JLabel();
JTextArea ta = new JTextArea(10, 40);
String text;
String answer = ThreadClient.answer;
static Thread t1 = new Thread(new ThreadClient());
static Thread t2 = new Thread(new Time());
public Client(String title) {
super(title);
t2.start();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().add(panel, BorderLayout.CENTER);
statusBar.setText("StatusBar");
getContentPane().add(statusBar, BorderLayout.SOUTH);
JButton b1 = new JButton("Verbinden");
b1.setActionCommand("Verbinden");
b1.setPreferredSize(new Dimension(150, 30));
b1.addActionListener(this);
JButton b2 = new JButton("Beenden");
b2.setActionCommand("Beenden");
b2.setPreferredSize(new Dimension(150, 30));
b2.addActionListener(this);
ta.setEditable(false);
ta.append(text);
JPanel panel1 = new JPanel();
panel1.setLayout(new FlowLayout());
panel1.add(b1);
panel1.add(b2);
JPanel panel2 = new JPanel();
panel1.setLayout(new FlowLayout());
panel2.add(ta);
panel.add(panel1);
panel.add(panel2);
}
public void CenterFrame() // Methode zentriert das Fenster
{
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((d.width - getSize().width) / 2,
(d.height - getSize().height) / 2);
}
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent event) {
if ("Verbinden".equals(event.getActionCommand())) {
t1.start();
}
if ("Beenden".equals(event.getActionCommand())) {
t1.stop();
}
}
public static void main(String[] args)
{
Client frame = new Client("Client");
frame.setSize(500, 200);
frame.CenterFrame();
frame.setVisible(true);
}
}
Meine Thread Klasse:
Java:
package Client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import javax.swing.JTextArea;
public class ThreadClient extends Thread implements Runnable {
static String answer;
public void run()
{
do{
try{
Socket server = new Socket("localhost", 3141);
java.io.InputStream in = server.getInputStream();
OutputStream out = server.getOutputStream();
String s = "GET\n";
out.write(s.getBytes());
InputStreamReader reader = new InputStreamReader(in);
BufferedReader buffer = new BufferedReader(reader);
answer = buffer.readLine();
System.out.println(answer);
server.close();
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}while(true);
}
}
Ich danke euch schon mal für eure Hilfe.
LG
JimK