tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
26
ZUGRIFFE
1192
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Masterpurzel
    Masterpurzel Masterpurzel ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Vienna, Austria, Austria
    Beiträge
    52
    Hallo,

    ich habe ein Problem und weiß nicht mehr weiter. Gegoogled habe ich auch schon, aber nix finden können!

    Mein Problem:

    Ich will von einem Applet (das die Methode public void start() besitzt eine Variable an eine andere Methode übergeben. Ich bekomme da allerdings immer wieder 0 raus!

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    
    public class chatapplet extends Applet implements Runnable {
    public static final int PORT = 9999;
    Socket socket;
    DataInputStream in;
    PrintStream out;
    TextField inputfield;
    TextArea outputarea;
    Thread thread;
    InetAddress ip = null;
    int localip;
    boolean connect;
    public void start() {
        try {
            socket = new Socket(this.getCodeBase().getHost(), PORT);
            ip = socket.getInetAddress();
            localport = socket.getLocalPort();
            in = new DataInputStream(socket.getInputStream());
            out = new PrintStream(socket.getOutputStream());
            say("Verbindung zum Server aufgenommen...");
            connect = true;
            if (thread == null) {
                thread = new Thread(this);
                thread.setPriority(Thread.MIN_PRIORITY);
                thread.start();
            }
        } catch (IOException e) {
            this.showStatus(e.toString());
            say("Verbindung zum Server fehlgeschlagen!");
            connect = false;
            inputfield.disable();
            //System.exit(1);
        }
    }
     
    public int getLocalPort() {
            System.out.println(localport);
        return localport;
    }
    }

    Jetzt möchte ich gerne wissen wie ich an den Inhalt von localport komme!

    Falls mehr Code von der Klasse gewünscht ist, bitte bescheid geben!

    Thx

    Liebe Grüße

    Masterpurzel
     

  2. #2
    Technoblade Technoblade ist offline Mitglied Gold
    Registriert seit
    Feb 2009
    Beiträge
    193
    Hi,

    leider kann ich nirgends die Definition der Variable localport finden. In deinem Quelltext taut sie nur in den zeieln 16, 36 und 37 auf. Wenn du oben wo du localip und der gleichen auch int localprot definiert hast wüsste ich nicht warum sich die Variable nicht ändern sollte. Ausser natürlich es wird eine Exception geworfen bevor der Wert festgelegt wird in Zeile 16.
     

  3. #3
    Avatar von Masterpurzel
    Masterpurzel Masterpurzel ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Vienna, Austria, Austria
    Beiträge
    52
    Sorry, durchs Kopieren ist mir die Variable localport verloren gegangen. Diese ist natürlich unter localip angelegt.

    Mein Problem ist allerdings, das sich die Variable ausserhalb des
    Code :
    1
    
    public void start()
    nicht richtig aufrufen lässt (immer 0), aber innerhalb von
    Code :
    1
    
    public void start()
    ist die ausgabe richtig!

    Liebe Grüße

    Masterpurzel
     

  4. #4
    SE Tutorials.de Gastzugang
    Ähm ... durch einfaches Copy&Paste genau diese Zeile verloren gegangen ... das kann ich mir einfach nicht vorstellen. Weil so wie dein Code oben aussieht wäre er nicht mal compilebar.
     

  5. #5
    Avatar von Masterpurzel
    Masterpurzel Masterpurzel ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Vienna, Austria, Austria
    Beiträge
    52
    Zitat Zitat von SPiKEe Beitrag anzeigen
    Ähm ... durch einfaches Copy&Paste genau diese Zeile verloren gegangen ... das kann ich mir einfach nicht vorstellen. Weil so wie dein Code oben aussieht wäre er nicht mal compilebar.
    Es ist ja auch nicht der ganze Code, ich habe nur die wichtigsten Stellen kopiert, da kann das schon mal passieren
     

  6. #6
    SE Tutorials.de Gastzugang
    Ouh ... ein kardinal-Fehler. Es ist zwar richtig das man nur relevanten Code posten soll ... allerdings so das dieser dann auch compilebar ist und das selbe Fehlverhalten wie der Originalcode hat. Um dein Problem also im Kontext verstehen zu können bräuchten wir dann doch bitte den vollständigen Source.
     

  7. #7
    MiMi MiMi ist offline Mitglied Smaragd
    Registriert seit
    Sep 2007
    Beiträge
    1.177
    Benutze doch auch java-tags wenn du java code hast.
    Klassennamen schreibt man gross
    Und vor den Variablennamen gehoert schon ein private/ public/protected
     
    Waere super wenn ihr euren Code in dieser Form einfuegt:
    [JAVA]System.out.println("Test :)");[/JAVA]
    wird zu:
    Code java:
    1
    
    System.out.println("Test :)");
    Tabs sind uebrigens keine Feinde :)
    Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
    Danke :D

  8. #8
    Avatar von Masterpurzel
    Masterpurzel Masterpurzel ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Vienna, Austria, Austria
    Beiträge
    52
    hier der volständige Code:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    
    import java.net.*;
    import java.util.ArrayList;
    import java.io.*;
    import java.awt.*;
    import java.applet.*;
     
    public class JavaChatClient extends Applet implements Runnable {
        public static final int PORT = 9999;
        Socket socket;
        DataInputStream in;
        PrintStream out;
        TextField inputfield;
        TextArea outputarea;
        Thread thread;
        InetAddress ip = null;
        int localport;
        int localip;
        boolean connect;
        
        public void init() {
            inputfield = new TextField();
            outputarea = new TextArea();
            outputarea.setFont( new Font("Dialog", Font.PLAIN, 12));
            outputarea.setEditable(false);
            this.setLayout(new BorderLayout());
            this.add("South", inputfield);
            this.add("Center", outputarea);
            this.setBackground(Color.lightGray);
            this.setForeground(Color.black);
            inputfield.setBackground(Color.white);
            outputarea.setBackground(Color.white);
        }
        
        @SuppressWarnings("deprecation")
        public void start() {
            try {
                socket = new Socket(this.getCodeBase().getHost(), PORT);
                ip = socket.getInetAddress();
                localport = socket.getLocalPort();
                in = new DataInputStream(socket.getInputStream());
                out = new PrintStream(socket.getOutputStream());
                say("Verbindung zum Server aufgenommen...");
                connect = true;
                if (thread == null) {
                    thread = new Thread(this);
                    thread.setPriority(Thread.MIN_PRIORITY);
                    thread.start();
                }
            } catch (IOException e) {
                this.showStatus(e.toString());
                say("Verbindung zum Server fehlgeschlagen!");
                connect = false;
                inputfield.disable();
            }
        }
        
        public void stop() {
            try {
                socket.close();
                socket = null;
            } catch (IOException e) {
                this.showStatus(e.toString());
            }
            if ((thread !=null) && thread.isAlive()) {
                thread.stop();
                thread = null;
            }
        }
        
        public void run() {
            String line;
     
            try {
                while(true) {
                    line = in.readLine();
                    if(line != null || !line.equals("")) {
                        outputarea.appendText(line + "\n");
                    }
                }
            } catch (IOException e) {
                //say("Verbindung zum Server abgebrochen");
            } catch(Exception e) {
                say("Verbindung zum Server abgebrochen");
                connect = false;
                inputfield.disable();
            }
        }
        
        public boolean action(Event e, Object what) {
            if (e.target == inputfield) {
                String inp = (String) e.arg;
                out.println(inp);
                inputfield.setText("");
                return true;
            }
            return false;
        }
     
        public void say(String msg) {
            outputarea.appendText("*** "+ msg +" ***\n");
            if(ip != null && connect == false) {
                outputarea.appendText(ip + " betritt den Raum!\n");
            } else if(ip != null && connect == true) {
                outputarea.appendText(ip + " verlässt den Raum!");
            }
        }
        
        public int getLocalPort() {
                    System.out.println(localport);
            return localport;
        }
    }

    Wie schaffe ich es, das ich die Variable localport weiterverwenden kann?

    Liebe Grüße

    Masterpurzel
    Geändert von Masterpurzel (11.06.11 um 19:51 Uhr) Grund: Frage hinzugefügt
     

  9. #9
    SE Tutorials.de Gastzugang
    In dem du erstmal mit nem DeBugger arbeitest oder in Zeile 39 anstatt einer Zuweisung einfach mal das hier schreibst
    Code java:
    1
    
    System.out.println(socket.getLocalPort())
    Denn im extremsten Fall ist "0" genau das was Socket.getLocalPort() returned ...
    Ein wenig Eigeninitiative sollte dann bitte schon vorhanden sein.

    Gegenfrage : was interessiert dich eigentlich der LocalPort ? Der normale "User" wird damit nichts anfangen können und dir nützt diese Information eigentlich auch nichts. Was noch sein könnte : der SecurityManager verhindert das Auslesen des LocalPorts und anstatt eine SecurityException zu werfen returned er einfach mit 0. Von daher stellt sich mir die Frage nach dem Sinn dessen ...
     

  10. #10
    Avatar von Masterpurzel
    Masterpurzel Masterpurzel ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Vienna, Austria, Austria
    Beiträge
    52
    Zitat Zitat von SPiKEe Beitrag anzeigen
    In dem du erstmal mit nem DeBugger arbeitest oder in Zeile 39 anstatt einer Zuweisung einfach mal das hier schreibst
    Code java:
    1
    
    System.out.println(socket.getLocalPort())
    Denn im extremsten Fall ist "0" genau das was Socket.getLocalPort() returned ...
    Ein wenig Eigeninitiative sollte dann bitte schon vorhanden sein.
    Da kommt ja der LocalPort raus, ich brauche ihn aber in einer Variablen!

    Zitat Zitat von SPiKEe Beitrag anzeigen
    Gegenfrage : was interessiert dich eigentlich der LocalPort ? Der normale "User" wird damit nichts anfangen können und dir nützt diese Information eigentlich auch nichts. Was noch sein könnte : der SecurityManager verhindert das Auslesen des LocalPorts und anstatt eine SecurityException zu werfen returned er einfach mit 0. Von daher stellt sich mir die Frage nach dem Sinn dessen ...
    Den LocalPort brauche ich nachher zur Verwendung einer Berechnung, aber das sollte jetzt nicht bestandteil meiner Frage sein
     

  11. #11
    xanadoo xanadoo ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    119
    Also, nur zum sicher sein, dass ich alles richtig verstanden habe:
    Wenn du auf Zeile 39 direkt:
    Code java:
    1
    
    System.out.println(socket.getLocalPort());
    schreibst, dann wird in der Console der richtige Port ausgegeben?

    Wo wird den der Wert der Variablen localport abgefragt?
    Die Methode
    Code java:
    1
    
    getLocalPort()
    wird ja nie aufgerufen.
     

  12. #12
    Avatar von Masterpurzel
    Masterpurzel Masterpurzel ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Vienna, Austria, Austria
    Beiträge
    52
    Ja du hast mich richtig verstanden! Die Methode
    Code java:
    1
    
    getLocalPort()
    wird in der Klasse JavaChatServer aufgerufen!
     

  13. #13
    xanadoo xanadoo ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    119
    Bist du sicher, dass die Variable localport zu dem Zeitpunkt wo du Methode getLocalPort() in der Klasse JavaChatServer aufrufst schon inizialisiert ist, also dass die Methode start() der Klasse JavaChatClient schon aufgerufen wurde?
     

  14. #14
    Avatar von Masterpurzel
    Masterpurzel Masterpurzel ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Vienna, Austria, Austria
    Beiträge
    52
    Zitat Zitat von xanadoo Beitrag anzeigen
    Bist du sicher, dass die Variable localport zu dem Zeitpunkt wo du Methode getLocalPort() in der Klasse JavaChatServer aufrufst schon inizialisiert ist, also dass die Methode start() der Klasse JavaChatClient schon aufgerufen wurde?
    Ja, weil ein einfaches
    Code java:
    1
    
    System.out.println(localport);
    hinter der localport-Zuweisung reicht und ich den LocalPort zu sehen bekomme!
     

  15. #15
    xanadoo xanadoo ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    119
    Wenn du damit die Zuweisung in der Methode start() meinst, dann sagt dies nichts aus!

    Denn wenn du getLocalPort() aufrufst, und erst danach start(), dann wird natürlich in der Methode start() der korrekte Wert ausgegegben.
    Aber zu dem Zeitpunkt zu welchem du getLocalPort() aufgerufen hattest, war die Variable noch nicht initialisiert.
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 17.03.11, 08:46
  2. Antworten: 13
    Letzter Beitrag: 07.12.09, 13:53
  3. Bean-Variablen als Parameter einer Methode einer anderen Bean
    Von mcdroemmel im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 25.06.09, 17:53
  4. Antworten: 8
    Letzter Beitrag: 12.04.06, 12:20
  5. Per void Methode auf Objekt einer Klasse zugreifen
    Von mkoeni1 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 09.04.06, 16:41

Stichworte