[Java] Problem mit der Variablenübergabe

03/03/2015 14:56 chrisyou#1
Hey Freunde!

Ich habe ein Problem mit der Übergabe von Variablen/Objekten im Zuge eines Java-Projektes.

In einer Klasse nutze ich einen BufferedWriter und BufferedReader, der wiederum einen Output/Inputstream eines Sockets als jeweilige Quelle hat.

Ich möchte nun von einer anderen Klasse auch etwas mithilfe des BufferedWriters schreiben. Wie stelle ich dies am geschicktesten an?

Der BufferedWriter wird in einer Methode der ersten Klasse deklariert.

Ich hoffe mein Problem wurde deutlich. Ich selbst würde mich nicht mehr als wirklicher Einsteiger bezeichnen, bin allerdings was mehrere Klassen und deren Übergriffe angeht sehr unerfahren.

EDIT: Move-Anfrage ist raus.
03/03/2015 16:20 XxharCs#2
Returne in deiner Methode dein erzeugtes BufferedWriter Objekt, oder mache eine getter-Methode die dir das BufferedWriter Objekt zurückgibt.
Jedoch musst du hier aufpassen, wenn mehrere Klassen auf das selbe zugreifen(in diesem Fall das schreiben) das kein Deadlock bzw. inkosistenz entsteht/herrscht.
03/03/2015 20:01 Zunft#3
Klasse_A:
Code:
BufferedWriter writer = new BufferedWriter(
new FileWriter(
new File("filename.txt").getAbsoluteFile()));

public BufferedWriter getWriter()
{
return writer;
}
Klasse_B:
Code:
Klasse_A writerClass = new Klasse_A();
BufferedWriter writer = writerClass.getWriter();
writer.write("Hallo Welt!");
writer.close();
03/03/2015 21:06 chrisyou#4
Quote:
Originally Posted by Zunft View Post
Klasse_A:
Code:
BufferedWriter writer = new BufferedWriter(
new FileWriter(
new File("filename.txt").getAbsoluteFile()));

public BufferedWriter getWriter()
{
return writer;
}
Klasse_B:
Code:
Klasse_A writerClass = new Klasse_A();
BufferedWriter writer = writerClass.getWriter();
writer.write("Hallo Welt!");
writer.close();
Meine zweite Klasse ist halt ein geloopeder Thread.

Wie verhindere ich da, dass KlasseA ständig nochmal ausgeführt wird?
03/03/2015 21:36 Zunft#5
Quote:
Originally Posted by chrisyou View Post
Meine zweite Klasse ist halt ein geloopeder Thread.

Wie verhindere ich da, dass KlasseA ständig nochmal ausgeführt wird?
Du kannst zum einen den BufferedWriter sowie die Funktion getWriter als public static deklarieren, wobei hier vielleicht eine NullPointerException auftreten könnte - wenn eine Variable/Funktion, die als public static deklariert wurde aufzurufen, musst du keine neue Instanz der Klasse bilden:

Klasse_A:
Code:
public static BufferedWriter writer = new BufferedWriter(
new FileWriter(
new File("filename.txt").getAbsoluteFile()));
Klasse_B:
Code:
Klasse_A.writer.write("Hallo Welt!");
Klasse_A.writer.close();
Eine andere Möglichkeit wäre, dass du die Klasse_A in Klasse_B global deklarierst und initialisierst bzw. bei der Instanzbildung von Klasse_B initialisierst:

Klasse_A:
Code:
BufferedWriter writer = new BufferedWriter(
new FileWriter(
new File("filename.txt").getAbsoluteFile()));

public BufferedWriter getWriter()
{
return writer;
}
Klasse_B:
Code:
public class Klasse_B
{
Klasse_A writerClass;
//Alternativ:
//Klasse_A writerClass = new Klasse_A();
BufferedWriter writer;
public Klasse_B()
{
Klasse_A writerClass = new Klasse_A();
//Bei Alternative kann obrige Zeile entfernt werden
writer = writerClass.getWriter();
}

//Dein Thread
// (...)

writer.write("Hallo Welt!");
writer.close();

// (...)

}
03/03/2015 21:51 chrisyou#6
Quote:
Originally Posted by Zunft View Post
Du kannst zum einen den BufferedWriter sowie die Funktion getWriter als public static deklarieren, wobei hier vielleicht eine NullPointerException auftreten könnte - um eine Variable/Funktion, die als public static deklariert wurde aufzurufen, musst du keine neue Instanz der Klasse bilden:

Klasse_A:
Code:
public static BufferedWriter writer = new BufferedWriter(
new FileWriter(
new File("filename.txt").getAbsoluteFile()));
Klasse_B:
Code:
Klasse_A.writer.write("Hallo Welt!");
Klasse_A.writer.close();
Eine andere Möglichkeit wäre, dass du den BufferedWriter in Klasse_B global deklarierst und initialisierst bzw. bei der Instanzbildung von Klasse_B initialisierst:

Klasse_A:
Code:
BufferedWriter writer = new BufferedWriter(
new FileWriter(
new File("filename.txt").getAbsoluteFile()));

public BufferedWriter getWriter()
{
return writer;
}
Klasse_B:
Code:
public class Klasse_B
{
Klasse_A writerClass;
//Alternativ:
//Klasse_A writerClass = new Klasse_A();
BufferedWriter writer;
public Klasse_B()
{
Klasse_A writerClass = new Klasse_A();
//Bei Alternative kann obrige Zeile entfernt werden
writer = writerClass.getWriter();
}

//Dein Thread
// (...)

writer.write("Hallo Welt!");
writer.close();

// (...)

}
Danke, die erste Methode fand ich gut.
Aber 'ne getWriter()-Methode brauche ich da ja nicht mehr.