Avatar billede carstennielsen Nybegynder
10. februar 2005 - 14:05 Der er 26 kommentarer og
1 løsning

Hente værdien fra en jTextField til en anden applikation

Hejsa

Jeg er nybegynder i kodning i Java og arbejder med jBuilder.

Hvordan kan jeg hente en String værdi fra et jTextfield fra et Java program til et andet Java program.

Jeg har et server del og en klient del. Når brugeren logger sig på med sit brugernavn, skriver brugerne sit brugernavn i et jTextField.

Som jeg henter ud med: brugernavn = jTextField1.getText();

Men hvordan kan jeg arbejde med værdien af jTextField1 i min server den?
Avatar billede arne_v Ekspert
10. februar 2005 - 14:09 #1
client sender vel brugernavnet til serveren via sockets eller RMI eller
hvad du nu bruger til kommunikation mellem client og server.
Avatar billede carstennielsen Nybegynder
10. februar 2005 - 14:12 #2
Hej

Jeg bruger Sockets.

Men kan ikke lige gennemskue hvad jeg skal skrive i min server del for t få værdien.
Avatar billede carstennielsen Nybegynder
10. februar 2005 - 14:16 #3
Nederstående kode er fra min tråd i min server del.

===BRYDSTYKKER AF KODE SERVER DEL===
ServerSocket minserver = null;

minserver = new ServerSocket(Integer.parseInt(portnummer.getText()));

Socket connectionsocket = minserver.accept();
InetAddress client = connectionsocket.getInetAddress();
MySqlBesked.append("Klient IP :" + " " + client.getHostAddress() + " Forbundet til server.\n");
===BRYDSTYKKER AF KODE SERVER DEL===
Avatar billede arne_v Ekspert
10. februar 2005 - 14:19 #4
Du hiver strenge ud af JTextField med getText metoden og skriver
data ud på socket ...
Avatar billede carstennielsen Nybegynder
10. februar 2005 - 14:25 #5
kan du give et eksempel?
Avatar billede carstennielsen Nybegynder
10. februar 2005 - 15:14 #6
bare et lille eksempel
Avatar billede arne_v Ekspert
10. februar 2005 - 15:59 #7
F.eks.:

Socket s = new Socket(host, port);
ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
oos.writeObject(tf.getText());
Avatar billede carstennielsen Nybegynder
10. februar 2005 - 16:16 #8
public class KlientGUIFrame
Socket echoSocket = null;
String brugernavn = null;
PrintWriter out = null;
BufferedReader in = null;

-------

public void startklient() {
Socket echoSocket = null;
try {
echoSocket = new Socket("192.168.135.50", 6666);
jTextArea1.append(echoSocket.toString());
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));       
/**TEST*/
ObjectOutputStream oos = new ObjectOutputStream(echoSocket.getOutputStream());
oos.writeObject(jTextField1.getText());
/**TEST*/       
} catch (UnknownHostException e) {
jTextArea1.append("Kender ikke til: " + echoSocket);
} catch (IOException e) {
jTextArea1.append("Kunne ikke få I/O " + "forbindelsen til :" + echoSocket);
}
try {
jTextArea1.append("\nServer IP " + echoSocket.getInetAddress() + "\n");
}
catch (Exception ex1) {jTextArea1.append("\n" + "\n" + "\n" + " !!! Serveren Er Ikke Startet Op !!! \n" + "\n"+ "\n"+ "\n");
}
TraadForbindelse1 = new TraadForbindelse(jTextArea1, jTextField2, in, jTextField1);
Thread MinTraad;
MinTraad = new Thread(TraadForbindelse1);
MinTraad.start();



Hvad er det jeg gør FORKERT??
Avatar billede repulse Nybegynder
10. februar 2005 - 17:57 #9
I denne linje forsøger du at skrive en String til en ObjectStream:

oos.writeObject(jTextField1.getText());

Måske du skulle prøve med:

oos.writeObject(jTextField1);

eller måske bare bruge en stream der kan sende strenge hvis det ikke er nødvendigt at sende hele objektet...
Avatar billede carstennielsen Nybegynder
10. februar 2005 - 18:04 #10
skal jeg så ikke skrive 

jTextArea1.append("TEST" + jTextField1);

Hvis jeg vil se om jeg får en værdi ud. Men syntes ikke jeg får noget resultat.
Avatar billede carstennielsen Nybegynder
10. februar 2005 - 18:05 #11
/**TEST*/
ObjectOutputStream oos = new ObjectOutputStream(echoSocket.getOutputStream());
oos.writeObject(jTextField1);
jTextArea1.append("e" + jTextField1);
/**TEST*/
Avatar billede arne_v Ekspert
10. februar 2005 - 18:16 #12
Da en String er et Object så er ObjectOutputStream glimrende til at sende String's med.

En OutputStream kan kun sende bytes.
Avatar billede arne_v Ekspert
10. februar 2005 - 18:18 #13
Med hensyn til "Hvad er det jeg gør FORKERT??" så ville det nok gjælpe hvis du fortalte
hvad der sker med den kode !
Avatar billede carstennielsen Nybegynder
10. februar 2005 - 18:31 #14
Okai.

Som sagt jeg er nybegynder i at kode i Java.

Jeg har en Server og en klient, som skulle snakke sammen via en socket.
Jeg har lavet det sådan at min server del, venter på at min klient logger på, og der efter tager ip adressen, hustnavn, og mangler nu at få brugernavnet. Brugernavnet bliver tastst ind i en jTextField1 i min klient del.
/*TEST*/
          jTextArea1.append("TEST 1");
          Socket s = new Socket(localhost_1, localport_1);
          jTextArea1.append("TEST 2");
          ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
          jTextArea1.append("TEST 3");
          oos.writeObject(jTextField1);
/*TEST*/
Jeg kan se at der bliver printet TEST1 TEST 2TEST3 ud i mit jTextArea. bare en test for at det hele blev kørt igennem.

Når jeg starter min server op, så står den og venter på en forbindelse fra min klient:

/**Venter På At Klienten Skal Logge På - Satrt*/
MySqlBesked.append("\nServer klar, Venter på forespørgelse...\n");
try {
Socket connectionsocket = minserver.accept();
InetAddress client = connectionsocket.getInetAddress();
RemoteIP = client.getHostAddress();
RemoteHostNavn = client.getHostName();
MySqlBesked.append("Klient Navn :" + " " + client.getHostName() + " Forbundet til server.\n");
MySqlBesked.append("Klient IP :" + " " + client.getHostAddress() + " Forbundet til server.\n");
BufferedReader input = new BufferedReader(new InputStreamReader (connectionsocket.getInputStream()));
}

Min klient connecter fint, og min server nupper iip adressen fra min klient.

Men et TextArea felt på min server del bliver fyldt med en masse vrøvl og volapyk.

Jeg vil bare gerne have det brugernavn jeg har tastet ind i min jTextField på min klient, over i min TextArea på min server.

Håber at det er infomation nok.
Tak.
Avatar billede arne_v Ekspert
10. februar 2005 - 18:35 #15
Når du bruger ObjectOutputStream i den ene ende skal du bruge ObjectInputStream
i den anden ende.
Avatar billede arne_v Ekspert
10. februar 2005 - 18:37 #16
ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
String s = (String)ois.readObject();
tf.setText(s);
Avatar billede arne_v Ekspert
10. februar 2005 - 18:38 #17
Hvis du vil bruge BufferedReader så skal du i den anden ende bruge
PrintWriter eller PrintStream.
Avatar billede arne_v Ekspert
10. februar 2005 - 18:40 #18
Socket s = new Socket(host, port);
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.println(tf.getText());

og

ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String s = br.readLine();
tf.setText(s);
Avatar billede carstennielsen Nybegynder
10. februar 2005 - 18:43 #19
D.v.s af..

dette her er min klient del
Socket s = new Socket(host, port);
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.println(tf.getText());

og det her er til min server del
ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String s = br.readLine();
tf.setText(s);

er det sådan det skal forstøes?
Avatar billede arne_v Ekspert
10. februar 2005 - 18:46 #20
Ja.

Lidt simplificeret.
Avatar billede carstennielsen Nybegynder
10. februar 2005 - 18:47 #21
OK. Jeg prøver.
Avatar billede carstennielsen Nybegynder
10. februar 2005 - 19:02 #22
Hvis jeg gør sådan her i min server del får jeg at vide at s_10 allerede er difineret. Men det er den ikke.

Socket connectionsocket = minserver.accept();
InetAddress client = connectionsocket.getInetAddress();
RemoteIP = client.getHostAddress();
RemoteHostNavn = client.getHostName();
MySqlBesked.append("Klient Navn :" + " " + client.getHostName() + " Forbundet til server.\n");
MySqlBesked.append("Klient IP :" + " " + client.getHostAddress() + " Forbundet til server.\n");
BufferedReader input = new BufferedReader(new InputStreamReader(connectionsocket.getInputStream()));
/*TESR FOR BRUGERNAVN*/
//ServerSocket ss = new ServerSocket(portnummer);
Socket s_10 = minserver.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(s_10.getInputStream()));
String s_10 = br.readLine();
MySqlBesked.append("TestBRUGERNAVN" + s_10);
/*TESR FOR BRUGERNAVN*/
Avatar billede arne_v Ekspert
10. februar 2005 - 19:10 #23
Socket s_10 = minserver.accept();
...
String s_10 = br.readLine();
Avatar billede carstennielsen Nybegynder
10. februar 2005 - 22:10 #24
/*TEST FOR BRUGERNAVN PÅ KLIENT*/
Socket KlientBNSocket = new Socket(localhost_1, klientbrugernavnport);
PrintWriter pw = new PrintWriter(KlientBNSocket.getOutputStream());
pw.println(jTextField1.getText());
jTextArea1.append("\nklientBrugerNavn: " + jTextField1.getText() + "\n");
/*TEST FOR BRUGERNAVN PÅ KLIENT*/

Nu er jeg da kommet så langt at jeg kan printe brugernavnet ud på min klient.
Avatar billede carstennielsen Nybegynder
11. februar 2005 - 11:17 #25
Hej igen. Ja du må have mig undskyldt.

På min klient side, kan jeg nu printe det brugernavn ud i en jTextArea, som bliver tastst ind i mit jTextField. Med følgende:

I min public class i min Frame står der:
String localhost_1 = "192.168.135.50";
int localport_1 = 6666;
int klientbrugernavnport = 5555;
/**Lokal Maskines IP*/
String localklientMachineIP = "";
/**maskinesn Navn*/
String klientName="";
/**Laver min tids konvatering*/
Date time = new Date();
DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd");
DateFormat df2 = new SimpleDateFormat("HH:mm:ss");
Socket echoSocket = null;
String brugernavn = null;
PrintWriter out = null;
BufferedReader in = null;
TraadForbindelse TraadForbindelse1 = null;

I min public void startklient i min Frame:
/*TEST FOR BRUGERNAVN PÅ KLIENT*/
Socket KlientBNSocket = new Socket(localhost_1, klientbrugernavnport);
PrintWriter pw = new PrintWriter(KlientBNSocket.getOutputStream());
pw.println(jTextField1.getText());
jTextArea1.append("\nklientBrugerNavn: " + jTextField1.getText() + "\n");
/*TEST FOR BRUGERNAVN PÅ KLIENT*/

Output til jTextArea1 bliver : klientBrugerNavn: MadMax

På min server del står der følgende:
I min public class i min Tråd står der:
package servergui;
import java.net.ServerSocket;
import java.net.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintWriter;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.DataInputStream;

class TraadForbindelse implements Runnable {
  String klientbrugernavn ="";
  int klientbrugernavnport = 5555;
  String RemoteIP ="";
  String RemoteHostNavn="";
  Socket connectionsocket;
  Socket clientSocket = null;
  PrintWriter out = null;
  JTextArea SystemBesked;
  JTextArea FejlBesked;
  JTextArea ModtagerBesked;
  JTextField SendBeksed;
  JTextField portnummer;
  JTextArea MySqlBesked;
  public TraadForbindelse(JTextArea SystemB, JTextArea FejlB, JTextArea ModtagerB, JTextField SendB, JTextField port, JTextArea MySqlB) {
    SystemBesked = SystemB;
    FejlBesked = FejlB;
    ModtagerBesked = ModtagerB;
    SendBeksed = SendB;
    portnummer = port;
    MySqlBesked = MySqlB;

    //Object jTextField1 = null;
    try {
      jbInit();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

public Socket GetSocket()
  {
    return clientSocket;
  }

public PrintWriter GetPrintWriterOut()
  {
    return out;
  }
  public void run()
  {
    ServerSocket minserver = null;
    ServerSocket KlientbrugernavnS = null;
    try {
          minserver = new ServerSocket(Integer.parseInt(portnummer.getText()));
          SystemBesked.append("\nPort Nummer" + ":" + minserver);
          }
  catch (IOException e)
          {
          FejlBesked.append("Fejl 1" + "Kunn ikke lytte til port:" + " " + portnummer.getText());
          System.exit(-1);
          }
/**Venter På At Klienten Skal Logge På - Satrt*/
MySqlBesked.append("\nServer klar, Venter på forespørgelse...\n");
try {
Socket connectionsocket = minserver.accept();
InetAddress client = connectionsocket.getInetAddress();
RemoteIP = client.getHostAddress();
RemoteHostNavn = client.getHostName();
MySqlBesked.append("Klient Navn :" + " " + client.getHostName() + " Forbundet til server.\n");
MySqlBesked.append("Klient IP :" + " " + client.getHostAddress() + " Forbundet til server.\n");
BufferedReader input = new BufferedReader(new InputStreamReader(connectionsocket.getInputStream()));
/*TESR FOR BRUGERNAVN*/
KlientbrugernavnS = new ServerSocket(klientbrugernavnport);
Socket connectionsocket_2 = KlientbrugernavnS.accept();
BufferedReader input_2 = new BufferedReader(new InputStreamReader(connectionsocket_2.getInputStream()));
String s_1 = input_2.readLine();
MySqlBesked.append("\nKlient Brugernavn: " + s_1);
MySqlBesked.append("\nKlient Brugernavn: " + KlientbrugernavnS);
MySqlBesked.append("\nKlient Brugernavn: " + connectionsocket_2);
MySqlBesked.append("\nKlient Brugernavn: " + input_2.readLine());
/*TESR FOR BRUGERNAVN*/
}
catch (Exception e)
  {
  MySqlBesked.append("\nFejl 2 - TraadForbindelse:" + e.getMessage());
  }
/**Venter På At Klienten Skal Logge På - Slut*/
    try {
        clientSocket = minserver.accept();
        }
    catch (IOException e)
        {
        FejlBesked.append("Fejl 3" + "Accept failed::" + " " + portnummer.getText());
        }
    try {
        out = new PrintWriter(clientSocket.getOutputStream(), true);
        }
    catch (IOException ex1)
        {
        }
        BufferedReader in = null;
    try {
        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        }
    catch (IOException ex2)
        {
        }
    String inputLine, outputLine;
    try {
      /**Læsrer fra Socket forbindelen*/
      while ( (inputLine = in.readLine()) != null)
        {
        ModtagerBesked.append(inputLine + "\n");
            if (ModtagerBesked.equals("EXIT"))
            {
              break;
            }
        }
      SystemBesked.append("Server Lukker og Slukker");
      out.close();
      in.close();
      minserver.close();
        }
    catch (IOException ex)
        {
        }
  }
  private void jbInit() throws Exception
        {
        }
}

Følgende outpul til min MySqlBeskeds felt bliver følgende:
Klient Brugernavn: null
Klient Brugernavn: ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=5555]
Klient Brugernavn: Socket[addr=/192.168.135.50,port=1476,localport=5555]
Klient Brugernavn: null

=====================================================================================

Hvor er det jeg fejler henne - jeg kan ikke lige helt hitte ud af det.

TAKKER.
Avatar billede carstennielsen Nybegynder
20. februar 2005 - 16:18 #26
skriv lige så du kan få dine point.
Avatar billede arne_v Ekspert
20. februar 2005 - 16:58 #27
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester