Avatar billede morteeart Nybegynder
15. september 2004 - 02:55 Der er 10 kommentarer og
1 løsning

Fejl med WindowListener

hej

jeg sidder og leger lidt med noget chat program noget fra en tutorial i min java bog.

og det går da også fint, medn jeg får en fejl ved
            server.addWindowListener(new WindowCloser());

og der sker faktisk intet når jeg loader programmer (hvis jeg altså dissabler addWindowsLIstener)

# souce #

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.text.*;

public class Server extends JFrame {

      private JTextField tf;
      private JTextArea ta;
      private ObjectOutputStream out;
      private ObjectInputStream in;
      private ServerSocket serverSocket;
      private Socket socket;

      public Server() {
        super( "Server 2004" );
        Container ct = getContentPane();
        tf = new JTextField();
        tf.addActionListener(
            new ActionListener() {
              public void actionPerformed(ActionEvent evt) {
                sendMeddelelse(tf.getText());
                }
              }
            );
        ct.add(tf,BorderLayout.NORTH);
        ta = new JTextArea();
        ct.add(ta,BorderLayout.CENTER);
        setSize(300,200);
        show();
      }

      public void body() {
        opretForbindelse();
        modtagMeddelelser();
        afslut();
      }

      private void opretForbindelse() {
                try{
              serverSocket = new ServerSocket(6666);
              ta.setText("Venter på klient\n");
              socket = serverSocket.accept();
              out = new ObjectOutputStream(socket.getOutputStream());
              out.flush();
              in = new ObjectInputStream(socket.getInputStream());
              String s = "Angiv dit navn";
              out.writeObject(s);
              out.flush();
              } catch(Exception e) {}
      }

      private void sendMeddelelse(String s){
          try{
              out.writeObject(s);
              out.flush();
              ta.append("\nServer:  " + s);
              } catch(Exception e) {
                    System.out.println(e.toString());
              }
      }

      private void modtagMeddelelser() {
        String str=null;
        do {
            try {
                str = (String)in.readObject();
            }catch(Exception e) {
                    System.out.println(e.toString());
            }
            ta.append("\nClient : " + str);
          } while ( !str.toUpperCase().equals("FARVEL"));
      }

      private void afslut() {
        ta.append("\nLukker Forbindelsen");
        try {
              out.close();
              in.close();
              socket.close();
              serverSocket.close();
            } catch (Exception e) {}
            setVisible(false);
            dispose();
            System.exit(0);
        }

        public static void main(String args[]) {
            Server server = new Server();
            server.addWindowListener(new WindowCloser());
            server.body();
        }



}


håben nogen kan give en hånd :)
Avatar billede arne_v Ekspert
15. september 2004 - 08:12 #1
Den mangler vel klassen WindowCloser eller så implementerer den ikke det rigtige interface.
Avatar billede arne_v Ekspert
15. september 2004 - 08:14 #2
Hvis den bare lukker vinduet, så er det med en JFrame meget nemmere bare at kalde:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Avatar billede morteeart Nybegynder
15. september 2004 - 10:06 #3
okay, der er så et andet problem.

Appletten kører, men der sker absolut intet.

i

  private void opretForbindelse() {
                try{
              serverSocket = new ServerSocket(6666);
              ta.setText("Venter på klient\n");
              socket = serverSocket.accept();
              out = new ObjectOutputStream(socket.getOutputStream());
              out.flush();
              in = new ObjectInputStream(socket.getInputStream());
              String s = "Angiv dit navn";
              out.writeObject(s);
              out.flush();
              } catch(Exception e) {}
      }

der burde ta.setText("Venter på klient\n");  vise noget på skærmen, men der gør den ikke. Nogen ide hvorfor ??
Avatar billede arne_v Ekspert
15. september 2004 - 10:20 #4
Prøv at udskriv Exception !

Mit gæt er at du får en exception f.eks. p.g.a. applet security og at linien
derfor slet ikke udføres.
Avatar billede morteeart Nybegynder
15. september 2004 - 10:27 #5
private void opretForbindelse() {
          try{
              serverSocket = new ServerSocket(6666);
              ta.setText("Venter på klient\n");
              socket = serverSocket.accept();
              out = new ObjectOutputStream(socket.getOutputStream());
              out.flush();
              in = new ObjectInputStream(socket.getInputStream());
              String s = "Angiv dit navn";
              out.writeObject(s);
              out.flush();
              } catch(Exception e) { System.out.println(e.toString()); }
      }

og den udskriver stadig intet :S
Avatar billede arne_v Ekspert
15. september 2004 - 10:32 #6
Og hvor kigger du ?

(I Java Console output vinduet ?)
Avatar billede morteeart Nybegynder
15. september 2004 - 10:32 #7
når jeg kører appletten fra min browser

ved ikke hvordan jeg kører der via. en dospromt.
Avatar billede arne_v Ekspert
15. september 2004 - 10:36 #8
Ja du kører applet i browser.

Men har du så kigget i Java Console efter fejl meddelelsen ?
Avatar billede morteeart Nybegynder
15. september 2004 - 10:41 #9
ahh, det havde jeg ikke lige tænkt over.

Her er fejlmeddelser:

Exception occured during event dispatching:
java.lang.IllegalArgumentException: null souce
Avatar billede morteeart Nybegynder
25. oktober 2004 - 01:26 #10
har sådan opgivet lidt.. kigge på det en eller anden gang.

hvis du vil have points, så må du godt svare.
Avatar billede arne_v Ekspert
25. oktober 2004 - 07:20 #11
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