ERLEDIGT
NEIN
NEIN
ANTWORTEN
26
26
ZUGRIFFE
1192
1192
EMPFEHLEN
-
05.06.11 18:11 #1
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
-
05.06.11 19:08 #2
- 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.
-
07.06.11 10:12 #3
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 desnicht richtig aufrufen lässt (immer 0), aber innerhalb vonCode :1
public void start()
ist die ausgabe richtig!Code :1
public void start()
Liebe Grüße
Masterpurzel
-
07.06.11 11:02 #4SE 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.
-
07.06.11 11:24 #5
-
07.06.11 11:42 #6SE 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.
-
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:
Tabs sind uebrigens keine Feinde :)Code java:1
System.out.println("Test :)");
Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
Danke :D
-
11.06.11 12:58 #8
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
MasterpurzelGeändert von Masterpurzel (11.06.11 um 19:51 Uhr) Grund: Frage hinzugefügt
-
11.06.11 22:16 #9SE Tutorials.de Gastzugang
In dem du erstmal mit nem DeBugger arbeitest oder in Zeile 39 anstatt einer Zuweisung einfach mal das hier schreibst
Denn im extremsten Fall ist "0" genau das was Socket.getLocalPort() returned ...Code java:1
System.out.println(socket.getLocalPort())
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 ...
-
12.06.11 10:48 #10
-
Also, nur zum sicher sein, dass ich alles richtig verstanden habe:
Wenn du auf Zeile 39 direkt:
schreibst, dann wird in der Console der richtige Port ausgegeben?Code java:1
System.out.println(socket.getLocalPort());
Wo wird den der Wert der Variablen localport abgefragt?
Die Methodewird ja nie aufgerufen.Code java:1
getLocalPort()
-
12.06.11 14:09 #12
Ja du hast mich richtig verstanden! Die Methode
wird in der Klasse JavaChatServer aufgerufen!Code java:1
getLocalPort()
-
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?
-
12.06.11 17:23 #14
Ja, weil ein einfaches
hinter der localport-Zuweisung reicht und ich den LocalPort zu sehen bekomme!Code java:1
System.out.println(localport);
-
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
-
Aufruf einer (in C# geschriebenen) void Methode in VB
Von Babatune im Forum .NET CaféAntworten: 1Letzter Beitrag: 17.03.11, 08:46 -
Ausführen einer void Methode als if-Bedingung
Von DudePr im Forum JavaAntworten: 13Letzter Beitrag: 07.12.09, 13:53 -
Bean-Variablen als Parameter einer Methode einer anderen Bean
Von mcdroemmel im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 25.06.09, 17:53 -
Per void Methode auf Objekt einer Klasse zugreifen
Von mkoeni1 im Forum JavaAntworten: 8Letzter Beitrag: 12.04.06, 12:20 -
Per void Methode auf Objekt einer Klasse zugreifen
Von mkoeni1 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 09.04.06, 16:41





Zitieren
Login





