also ich habe einen Chat- sErver und einen Chat -Client programmiert!
In swing habe ich alles hinbekommen, jetzt wollte ich versuchen die GUI in SWT zu schreiben.!
was ja eigentlich kein einfluss auf den client und den server hat...
sondern eigentlich müsste ich nur die GUI ändern!
es funktioniert nicht mehr...WIESO?
edit:Also wie ein chat funktioniert weiß ja jeder, man schriebt einen text in ein TextFeld und danach klickt man auf den Button "senden" ..und dann soll der text gesendet werden an den server und in das chat Feld ausgegeben werden!
also wenn ich z.b 123 eingebe und auf den Button klicke,kommt diese consolen ausgabe
netzwerkverbindung steht
gelesen: 123
Exception in thread "ReaderThread" org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Widget.error(Unknown Source)
at org.eclipse.swt.widgets.Widget.checkWidget(Unknown Source)
at org.eclipse.swt.widgets.Text.append(Unknown Source)
at swtChat.ChatClienInSWT$EingehendReader.run(ChatClienInSWT.java:99)
at java.lang.Thread.run(Thread.java:722)
in meinem Programm java 99 ist:
wieso sollte die zeile nicht funktionieren?!
also die verbindung steht ja, aber irgendwie kann es nicht eingefügt werden!?
reicht das als erklärung?
In swing habe ich alles hinbekommen, jetzt wollte ich versuchen die GUI in SWT zu schreiben.!
was ja eigentlich kein einfluss auf den client und den server hat...
sondern eigentlich müsste ich nur die GUI ändern!
es funktioniert nicht mehr...WIESO?
edit:Also wie ein chat funktioniert weiß ja jeder, man schriebt einen text in ein TextFeld und danach klickt man auf den Button "senden" ..und dann soll der text gesendet werden an den server und in das chat Feld ausgegeben werden!
also wenn ich z.b 123 eingebe und auf den Button klicke,kommt diese consolen ausgabe
netzwerkverbindung steht
gelesen: 123
Exception in thread "ReaderThread" org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Widget.error(Unknown Source)
at org.eclipse.swt.widgets.Widget.checkWidget(Unknown Source)
at org.eclipse.swt.widgets.Text.append(Unknown Source)
at swtChat.ChatClienInSWT$EingehendReader.run(ChatClienInSWT.java:99)
at java.lang.Thread.run(Thread.java:722)
in meinem Programm java 99 ist:
Java:
eingehend.append(nachricht + "\n");
wieso sollte die zeile nicht funktionieren?!
also die verbindung steht ja, aber irgendwie kann es nicht eingefügt werden!?
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 ChatServerInSWT {
ArrayList<PrintWriter> clientAusgabeStröme;
public class ClientHAndler implements Runnable {
BufferedReader reader;
Socket socket;
public ClientHAndler(Socket clientSocket) {
try {
socket = clientSocket;
InputStreamReader isReader = new InputStreamReader(socket.getInputStream());
reader = new BufferedReader(isReader);
}
catch (IOException e) {
e.printStackTrace();
System.out.println("ERROR4");
}
}
@Override
public void run() {
String nachricht;
try {
while ((nachricht = reader.readLine()) != null) {
System.out.println("gelesen: " + nachricht);
esAllenWeitersagen(nachricht);
}
}
catch (IOException e) {
e.printStackTrace();
System.out.println("ERROR5");
}
}
private void esAllenWeitersagen(String nachricht) {
Iterator<PrintWriter> it = clientAusgabeStröme.iterator();
while (it.hasNext()) {
try{
PrintWriter writer = (PrintWriter) it.next();
writer.println(nachricht);
writer.flush();}
catch (Exception e) {
e.printStackTrace();
System.out.println("ERROR6");
}
}
}
}
public static void main (String[]args){
ChatServerInSWT chatServer = new ChatServerInSWT();
chatServer.los();
}
private void los() {
clientAusgabeStröme = new ArrayList();
try {
ServerSocket serverSocket = new ServerSocket(5000);
while (true) {
Socket clientSocket = serverSocket.accept();
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
clientAusgabeStröme.add(writer);
Thread t = new Thread(new ClientHAndler(clientSocket));
t.setName("Thread");
t.start();
System.out.println("sie haben eine Verbindung");
}
}
catch (IOException e) {
e.printStackTrace();
System.out.println("ERROR7");
}
}
}
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class ChatClienInSWT {
Text eingehend;
Text ausgehend;
BufferedReader reader;
PrintWriter writer;
Socket socket;
public static void main(String[] arg) {
new ChatClienInSWT().los();
}
private void los() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Chat");
FillLayout layout = new FillLayout();
layout.type = SWT.VERTICAL;
shell.setLayout(layout);
ausgehend = new Text(shell, SWT.SINGLE);
eingehend = new Text(shell, SWT.MULTI | SWT.V_SCROLL);
eingehend.setEditable(false);
// eingehend = new Browser(shell, SWT.MULTI | SWT.V_SCROLL);
Button button = new Button(shell, SWT.PUSH);
button.setText("Senden");
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
try {
writer.println(ausgehend.getText());
writer.flush();
}
catch (Exception ex) {
ex.printStackTrace();
System.out.println("ERROR1");
}
ausgehend.setText("");
}
});
netzwerkEinrichten();
Thread readerThread = new Thread(new EingehendReader());
readerThread.setName("ReaderThread");
readerThread.start();
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
public void netzwerkEinrichten() {
try {
socket = new Socket("192.168.89.25", 5000);
InputStreamReader streamReader = new InputStreamReader(socket.getInputStream());
reader = new BufferedReader(streamReader);
writer = new PrintWriter(socket.getOutputStream());
System.out.println("netzwerkverbindung steht");
}
catch (IOException e) {
e.printStackTrace();
System.out.println("ERROR2");
}
}
class EingehendReader implements Runnable {
@Override
public void run() {
String nachricht;
try {
/** wenn was neues gesendet wurde... */
while ((nachricht = reader.readLine()) != null) {
System.out.println("gelesen: " + nachricht);
/** fügt alle gesendeten NAchrichten in das Text Feld */
eingehend.append(nachricht + "\n");
}
}
catch (IOException e) {
e.printStackTrace();
System.out.println("ERROR3");
}
}
}
}
reicht das als erklärung?
Zuletzt bearbeitet: