Variablen von void-Methode in einer anderen Methode übernehmen/ausgeben

Masterpurzel

Mitglied
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!

Java:
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
 
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.
 
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:
public void start()
nicht richtig aufrufen lässt (immer 0), aber innerhalb von
Code:
public void start()
ist die ausgabe richtig!

Liebe Grüße

Masterpurzel
 
Ä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.
 
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 ;)
 
hier der volständige Code:

Java:
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
 
Zuletzt bearbeitet:
In dem du erstmal mit nem DeBugger arbeitest oder in Zeile 39 anstatt einer Zuweisung einfach mal das hier schreibst
Java:
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 ...
 
In dem du erstmal mit nem DeBugger arbeitest oder in Zeile 39 anstatt einer Zuweisung einfach mal das hier schreibst
Java:
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!

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 ;)
 

Neue Beiträge

Zurück