Guten Tag alle zusammen,
ich weiß nicht ob dieses Thema hier rein gehört oder doch eher zu Netzwerken, hoffe es ist hier jedoch richtig.
Mein eigentliches Problem ist, ich habe zwei Threads die über Pipes kommunizieren und über eine Pipe möchte ich komplette Objekte schicken (ich weiß ich könnte den anderen Thread einfach auf z.b. auf Vector zugreifen lassen... aber das will ich nicht in dieser form). Ich bin noch ein ziemlicher einstiger in sachen Threads usw. nun habe ich einen Weg gefuden wie dies möglich ist, aber ich bekommen eine IOException Read end dead (aber nur wenn ich ein Objekt über die Pipe senden möchte). hier ist der Code(die Wichtigen ausschnitte):
Mainclass (Start Thread)
Sende Thread:
Empfänger Thread:
Die Excpetion die ich bekomme:
Der Fehler kommt immer wenn ich Case 3 aufrufe (ob noch weiter Fehler auftauchen als diese kann ich zu diesem Zeitpunkt nicht sagen). Möglicherweise sind noch viele Fehler enthalten oder es gibt eine Einfachere möglichkeit ein Objekt über eine Pipe zu senden als diese, die ich gewählt habe.
Ich bin auf jedenfall für jede Hilfe sehr dankbar!!!
ich weiß nicht ob dieses Thema hier rein gehört oder doch eher zu Netzwerken, hoffe es ist hier jedoch richtig.
Mein eigentliches Problem ist, ich habe zwei Threads die über Pipes kommunizieren und über eine Pipe möchte ich komplette Objekte schicken (ich weiß ich könnte den anderen Thread einfach auf z.b. auf Vector zugreifen lassen... aber das will ich nicht in dieser form). Ich bin noch ein ziemlicher einstiger in sachen Threads usw. nun habe ich einen Weg gefuden wie dies möglich ist, aber ich bekommen eine IOException Read end dead (aber nur wenn ich ein Objekt über die Pipe senden möchte). hier ist der Code(die Wichtigen ausschnitte):
Mainclass (Start Thread)
Java:
package Thread;
import java.io.*;
public class ControlerThread {
public static void main(String[] args) {
PipedReader pr = new PipedReader();
PipedWriter pw = new PipedWriter();
PipedOutputStream pos = new PipedOutputStream();
PipedInputStream pis = null;
ObjectOutputStream oos =null;
ObjectInputStream ois = null;
try
{
pw.connect(pr);
pis = new PipedInputStream(pos);
oos = new ObjectOutputStream(pos);
ois = new ObjectInputStream(pis);
}catch(IOException ioe)
{
}
ModelThread mt = new ModelThread(ois,pr);
ViewThread vt = new ViewThread(oos,pw);
vt.start();
mt.start();
}
}
Sende Thread:
Java:
public class ViewThread extends Thread{
PipedWriter pw;
BufferedWriter bw;
ObjectOutputStream oos;
public ViewThread(ObjectOutputStream oos,PipedWriter pwr )
{
this.oos = oos;
this.pw = pwr;
bw = new BufferedWriter(pw);
}
...
...
...
case 3: try{
//if(!mu.exportFile().isEmpty()){
Kontakt k = new Kontakt();
k.anrede = "Herr";
k.bemerkung ="MusterMuster";
k.fax ="234";
k.name ="Mustermann";
k.ort ="Musterort";
oos.writeByte(123); // Dies kann ich Schreiben ohne ein Fehler zu bekommen
oos.writeObject(k);
oos.flush();
bw.write("3");
bw.write("\n");
bw.flush();
//oos.flush();
/*for(Kontakt k : mu.exportFile())
{
System.out.println(k.bemerkung);
oos.writeObject(k);
oos.flush();
}
*/
//}
}catch(IOException ioe)
{
ioe.printStackTrace();
}; break;
Empfänger Thread:
Java:
package Thread;
import java.io.*;
public class ModelThread extends Thread{
private PipedReader pr = null;
private BufferedReader br = null;
//private String datei = "test.csv";
//private FileOutputStream fos;
//private ObjectOutputStream oos = null;
// private FileInputStream fis;
private ObjectInputStream ois = null;
public ModelThread(ObjectInputStream ois,PipedReader pr)
{
this.pr = pr;
br = new BufferedReader(pr);
this.ois = ois;
}
public void run()
{
try
{
do
{
if(br.readLine().equals("3"))
{
System.out.println("available:" + ois.available());
if(ois.available() != 0 )
{
Kontakt k = (Kontakt) ois.readObject();
System.out.println(k.name);
}
}
}
while(true);
}catch(IOException e)
{
}catch(ClassNotFoundException ce)
{
}
}
}
Die Excpetion die ich bekomme:
Java:
java.io.IOException: Read end dead
at java.io.PipedInputStream.checkStateForReceive(Unknown Source)
at java.io.PipedInputStream.receive(Unknown Source)
at java.io.PipedOutputStream.write(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.writeBlockHeader(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source)
at java.io.ObjectOutputStream.writeFatalException(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at Thread.ViewThread.run(ViewThread.java:54)
Der Fehler kommt immer wenn ich Case 3 aufrufe (ob noch weiter Fehler auftauchen als diese kann ich zu diesem Zeitpunkt nicht sagen). Möglicherweise sind noch viele Fehler enthalten oder es gibt eine Einfachere möglichkeit ein Objekt über eine Pipe zu senden als diese, die ich gewählt habe.
Ich bin auf jedenfall für jede Hilfe sehr dankbar!!!