Salut!
J'ai un problème pour faire parler 2 threads entre eux:
Je veux qu'ils s'échanges des String. J'utilise donc un PipedReader et
un PipedWriter connectés entre eux...
Par dessus un BufferedReader et un BufferedWriter pour utiliser des
String.
Seulement, je veux que chaque thread soit en permanence à l'écoute de
son BufferedReader.
J'ai donc mis le tout dans une boucle while car il me semblais que
BufferedReader.readLine() bloquait jusqu'à obtenir une ligne complète.
(Pour les tests j'utilise juste un seul thread.)
Mais j'obtiens:
java.io.IOException: Write end dead
at java.io.PipedReader.read(PipedReader.java:242)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at Interpreter.run(Interpreter.java:29)
Voici mon source (je m'occuperai plus tard de la condition du while):
// Le thread:
public void run() {
input = new BufferedReader(reader);
output = new BufferedWriter(writer);
String str;
while (true) {
try {
str = input.readLine();
System.out.println("Ecrit");
output.write("repondu", 0, 7);
output.newLine();
output.flush();
} catch (IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
/// le main():
Interpreter i = new Interpreter();
try {
PipedReader istream;
PipedWriter ostream;
BufferedReader input;
BufferedWriter output;
istream = new PipedReader();
input = new BufferedReader(istream);
ostream = new PipedWriter();
output = new BufferedWriter(ostream);
/* un tas de trucs pour connecter les PipedReader et writer..*/
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
JavaJug
Regarde la doc des PipedInput/OutputStream. Y'a rien dans celle des PipedReader/Writer, mais il faut savoir qu'il ne faut pas créer un Reader et un Writer connecté entre eux dans un même Thread, ça peut créer un deadlock. J'espère que dans ton "un tas de trucs pour connecter les PipedReader et writer", tu ne fais pas ça ? Xav
tuxfighter wrote:
Salut! J'ai un problème pour faire parler 2 threads entre eux: Je veux qu'ils s'échanges des String. J'utilise donc un PipedReader et un PipedWriter connectés entre eux... Par dessus un BufferedReader et un BufferedWriter pour utiliser des String. Seulement, je veux que chaque thread soit en permanence à l'écoute de son BufferedReader. J'ai donc mis le tout dans une boucle while car il me semblais que BufferedReader.readLine() bloquait jusqu'à obtenir une ligne complète. (Pour les tests j'utilise juste un seul thread.) Mais j'obtiens: java.io.IOException: Write end dead at java.io.PipedReader.read(PipedReader.java:242) at java.io.BufferedReader.fill(BufferedReader.java:136) at java.io.BufferedReader.readLine(BufferedReader.java:299) at java.io.BufferedReader.readLine(BufferedReader.java:362) at Interpreter.run(Interpreter.java:29)
Voici mon source (je m'occuperai plus tard de la condition du while): // Le thread: public void run() { input = new BufferedReader(reader); output = new BufferedWriter(writer); String str; while (true) { try { str = input.readLine(); System.out.println("Ecrit"); output.write("repondu", 0, 7); output.newLine(); output.flush(); } catch (IOException e) { System.out.println(e.getMessage()); e.printStackTrace(); } } }
/// le main(): Interpreter i = new Interpreter();
try { PipedReader istream; PipedWriter ostream; BufferedReader input; BufferedWriter output; istream = new PipedReader(); input = new BufferedReader(istream); ostream = new PipedWriter(); output = new BufferedWriter(ostream);
/* un tas de trucs pour connecter les PipedReader et writer..*/
////////////// PS: J'ai dut mettre les flush() sinon ça ne transmettait rien
Question: Comment faire pour que ça marche, c'est à dire pour que readLine() attende qu'elle lise une ligne complète avant de retourner
Merci par avance. Tuxfighter
-- "There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened." -- Douglas Adams
Regarde la doc des PipedInput/OutputStream. Y'a rien dans celle des
PipedReader/Writer, mais il faut savoir qu'il ne faut pas créer un
Reader et un Writer connecté entre eux dans un même Thread, ça peut
créer un deadlock. J'espère que dans ton "un tas de trucs pour connecter
les PipedReader et writer", tu ne fais pas ça ?
Xav
tuxfighter wrote:
Salut!
J'ai un problème pour faire parler 2 threads entre eux:
Je veux qu'ils s'échanges des String. J'utilise donc un PipedReader et
un PipedWriter connectés entre eux...
Par dessus un BufferedReader et un BufferedWriter pour utiliser des
String.
Seulement, je veux que chaque thread soit en permanence à l'écoute de
son BufferedReader.
J'ai donc mis le tout dans une boucle while car il me semblais que
BufferedReader.readLine() bloquait jusqu'à obtenir une ligne complète.
(Pour les tests j'utilise juste un seul thread.)
Mais j'obtiens:
java.io.IOException: Write end dead
at java.io.PipedReader.read(PipedReader.java:242)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at Interpreter.run(Interpreter.java:29)
Voici mon source (je m'occuperai plus tard de la condition du while):
// Le thread:
public void run() {
input = new BufferedReader(reader);
output = new BufferedWriter(writer);
String str;
while (true) {
try {
str = input.readLine();
System.out.println("Ecrit");
output.write("repondu", 0, 7);
output.newLine();
output.flush();
} catch (IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
/// le main():
Interpreter i = new Interpreter();
try {
PipedReader istream;
PipedWriter ostream;
BufferedReader input;
BufferedWriter output;
istream = new PipedReader();
input = new BufferedReader(istream);
ostream = new PipedWriter();
output = new BufferedWriter(ostream);
/* un tas de trucs pour connecter les PipedReader et writer..*/
//////////////
PS: J'ai dut mettre les flush() sinon ça ne transmettait rien
Question: Comment faire pour que ça marche, c'est à dire pour que
readLine() attende qu'elle lise une ligne complète avant de retourner
Merci par avance.
Tuxfighter
--
"There is a theory which states that if ever anyone discovers exactly
what the Universe is for and why it is here, it will instantly disappear
and be replaced by something even more bizarre and inexplicable.
There is another theory which states that this has already happened."
-- Douglas Adams
Regarde la doc des PipedInput/OutputStream. Y'a rien dans celle des PipedReader/Writer, mais il faut savoir qu'il ne faut pas créer un Reader et un Writer connecté entre eux dans un même Thread, ça peut créer un deadlock. J'espère que dans ton "un tas de trucs pour connecter les PipedReader et writer", tu ne fais pas ça ? Xav
tuxfighter wrote:
Salut! J'ai un problème pour faire parler 2 threads entre eux: Je veux qu'ils s'échanges des String. J'utilise donc un PipedReader et un PipedWriter connectés entre eux... Par dessus un BufferedReader et un BufferedWriter pour utiliser des String. Seulement, je veux que chaque thread soit en permanence à l'écoute de son BufferedReader. J'ai donc mis le tout dans une boucle while car il me semblais que BufferedReader.readLine() bloquait jusqu'à obtenir une ligne complète. (Pour les tests j'utilise juste un seul thread.) Mais j'obtiens: java.io.IOException: Write end dead at java.io.PipedReader.read(PipedReader.java:242) at java.io.BufferedReader.fill(BufferedReader.java:136) at java.io.BufferedReader.readLine(BufferedReader.java:299) at java.io.BufferedReader.readLine(BufferedReader.java:362) at Interpreter.run(Interpreter.java:29)
Voici mon source (je m'occuperai plus tard de la condition du while): // Le thread: public void run() { input = new BufferedReader(reader); output = new BufferedWriter(writer); String str; while (true) { try { str = input.readLine(); System.out.println("Ecrit"); output.write("repondu", 0, 7); output.newLine(); output.flush(); } catch (IOException e) { System.out.println(e.getMessage()); e.printStackTrace(); } } }
/// le main(): Interpreter i = new Interpreter();
try { PipedReader istream; PipedWriter ostream; BufferedReader input; BufferedWriter output; istream = new PipedReader(); input = new BufferedReader(istream); ostream = new PipedWriter(); output = new BufferedWriter(ostream);
/* un tas de trucs pour connecter les PipedReader et writer..*/
////////////// PS: J'ai dut mettre les flush() sinon ça ne transmettait rien
Question: Comment faire pour que ça marche, c'est à dire pour que readLine() attende qu'elle lise une ligne complète avant de retourner
Merci par avance. Tuxfighter
-- "There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened." -- Douglas Adams
Terry
le "un tas de truc pour connecter..." doit normalement se résumer à un truc du genre (flemme d'aller voir la javadoc):
istream.connect(ostream) ;
dont l'absence pourrait expliquer le dead end
D'autre part je confirme qu'il ne faut pas ce genre de truc ds le même thread et puis il faut savoir que les pipe peuvent saturer...
sinon j'ai un code pas tres gros (genre cinq classes) qui utilise des PipedInput/OutputStream avec serialisation des objets avt passage ds le pipe et deserialisation a l'arriver pour faire communiquer un anneau de thread
"JavaJug" a écrit dans le message de news: c7vjb5$35j$
Regarde la doc des PipedInput/OutputStream. Y'a rien dans celle des PipedReader/Writer, mais il faut savoir qu'il ne faut pas créer un Reader et un Writer connecté entre eux dans un même Thread, ça peut créer un deadlock. J'espère que dans ton "un tas de trucs pour connecter les PipedReader et writer", tu ne fais pas ça ? Xav
tuxfighter wrote:
Salut! J'ai un problème pour faire parler 2 threads entre eux: Je veux qu'ils s'échanges des String. J'utilise donc un PipedReader et un PipedWriter connectés entre eux... Par dessus un BufferedReader et un BufferedWriter pour utiliser des String. Seulement, je veux que chaque thread soit en permanence à l'écoute de son BufferedReader. J'ai donc mis le tout dans une boucle while car il me semblais que BufferedReader.readLine() bloquait jusqu'à obtenir une ligne complète. (Pour les tests j'utilise juste un seul thread.) Mais j'obtiens: java.io.IOException: Write end dead at java.io.PipedReader.read(PipedReader.java:242) at java.io.BufferedReader.fill(BufferedReader.java:136) at java.io.BufferedReader.readLine(BufferedReader.java:299) at java.io.BufferedReader.readLine(BufferedReader.java:362) at Interpreter.run(Interpreter.java:29)
Voici mon source (je m'occuperai plus tard de la condition du while): // Le thread: public void run() { input = new BufferedReader(reader); output = new BufferedWriter(writer); String str; while (true) { try { str = input.readLine(); System.out.println("Ecrit"); output.write("repondu", 0, 7); output.newLine(); output.flush(); } catch (IOException e) { System.out.println(e.getMessage()); e.printStackTrace(); } } }
/// le main(): Interpreter i = new Interpreter();
try { PipedReader istream; PipedWriter ostream; BufferedReader input; BufferedWriter output; istream = new PipedReader(); input = new BufferedReader(istream); ostream = new PipedWriter(); output = new BufferedWriter(ostream);
/* un tas de trucs pour connecter les PipedReader et writer..*/
////////////// PS: J'ai dut mettre les flush() sinon ça ne transmettait rien
Question: Comment faire pour que ça marche, c'est à dire pour que readLine() attende qu'elle lise une ligne complète avant de retourner
Merci par avance. Tuxfighter
-- "There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened." -- Douglas Adams
le "un tas de truc pour connecter..." doit normalement se résumer à un truc
du genre (flemme d'aller voir la javadoc):
istream.connect(ostream) ;
dont l'absence pourrait expliquer le dead end
D'autre part je confirme qu'il ne faut pas ce genre de truc ds le même
thread et puis il faut savoir que les pipe peuvent saturer...
sinon j'ai un code pas tres gros (genre cinq classes) qui utilise des
PipedInput/OutputStream avec serialisation des objets avt passage ds le pipe
et deserialisation a l'arriver pour faire communiquer un anneau de thread
"JavaJug" <javajug@globalfongus.com> a écrit dans le message de news:
c7vjb5$35j$1@eerie.ema.fr...
Regarde la doc des PipedInput/OutputStream. Y'a rien dans celle des
PipedReader/Writer, mais il faut savoir qu'il ne faut pas créer un
Reader et un Writer connecté entre eux dans un même Thread, ça peut
créer un deadlock. J'espère que dans ton "un tas de trucs pour connecter
les PipedReader et writer", tu ne fais pas ça ?
Xav
tuxfighter wrote:
Salut!
J'ai un problème pour faire parler 2 threads entre eux:
Je veux qu'ils s'échanges des String. J'utilise donc un PipedReader et
un PipedWriter connectés entre eux...
Par dessus un BufferedReader et un BufferedWriter pour utiliser des
String.
Seulement, je veux que chaque thread soit en permanence à l'écoute de
son BufferedReader.
J'ai donc mis le tout dans une boucle while car il me semblais que
BufferedReader.readLine() bloquait jusqu'à obtenir une ligne complète.
(Pour les tests j'utilise juste un seul thread.)
Mais j'obtiens:
java.io.IOException: Write end dead
at java.io.PipedReader.read(PipedReader.java:242)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at Interpreter.run(Interpreter.java:29)
Voici mon source (je m'occuperai plus tard de la condition du while):
// Le thread:
public void run() {
input = new BufferedReader(reader);
output = new BufferedWriter(writer);
String str;
while (true) {
try {
str = input.readLine();
System.out.println("Ecrit");
output.write("repondu", 0, 7);
output.newLine();
output.flush();
} catch (IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
/// le main():
Interpreter i = new Interpreter();
try {
PipedReader istream;
PipedWriter ostream;
BufferedReader input;
BufferedWriter output;
istream = new PipedReader();
input = new BufferedReader(istream);
ostream = new PipedWriter();
output = new BufferedWriter(ostream);
/* un tas de trucs pour connecter les PipedReader et writer..*/
//////////////
PS: J'ai dut mettre les flush() sinon ça ne transmettait rien
Question: Comment faire pour que ça marche, c'est à dire pour que
readLine() attende qu'elle lise une ligne complète avant de retourner
Merci par avance.
Tuxfighter
--
"There is a theory which states that if ever anyone discovers exactly
what the Universe is for and why it is here, it will instantly disappear
and be replaced by something even more bizarre and inexplicable.
There is another theory which states that this has already happened."
-- Douglas Adams
le "un tas de truc pour connecter..." doit normalement se résumer à un truc du genre (flemme d'aller voir la javadoc):
istream.connect(ostream) ;
dont l'absence pourrait expliquer le dead end
D'autre part je confirme qu'il ne faut pas ce genre de truc ds le même thread et puis il faut savoir que les pipe peuvent saturer...
sinon j'ai un code pas tres gros (genre cinq classes) qui utilise des PipedInput/OutputStream avec serialisation des objets avt passage ds le pipe et deserialisation a l'arriver pour faire communiquer un anneau de thread
"JavaJug" a écrit dans le message de news: c7vjb5$35j$
Regarde la doc des PipedInput/OutputStream. Y'a rien dans celle des PipedReader/Writer, mais il faut savoir qu'il ne faut pas créer un Reader et un Writer connecté entre eux dans un même Thread, ça peut créer un deadlock. J'espère que dans ton "un tas de trucs pour connecter les PipedReader et writer", tu ne fais pas ça ? Xav
tuxfighter wrote:
Salut! J'ai un problème pour faire parler 2 threads entre eux: Je veux qu'ils s'échanges des String. J'utilise donc un PipedReader et un PipedWriter connectés entre eux... Par dessus un BufferedReader et un BufferedWriter pour utiliser des String. Seulement, je veux que chaque thread soit en permanence à l'écoute de son BufferedReader. J'ai donc mis le tout dans une boucle while car il me semblais que BufferedReader.readLine() bloquait jusqu'à obtenir une ligne complète. (Pour les tests j'utilise juste un seul thread.) Mais j'obtiens: java.io.IOException: Write end dead at java.io.PipedReader.read(PipedReader.java:242) at java.io.BufferedReader.fill(BufferedReader.java:136) at java.io.BufferedReader.readLine(BufferedReader.java:299) at java.io.BufferedReader.readLine(BufferedReader.java:362) at Interpreter.run(Interpreter.java:29)
Voici mon source (je m'occuperai plus tard de la condition du while): // Le thread: public void run() { input = new BufferedReader(reader); output = new BufferedWriter(writer); String str; while (true) { try { str = input.readLine(); System.out.println("Ecrit"); output.write("repondu", 0, 7); output.newLine(); output.flush(); } catch (IOException e) { System.out.println(e.getMessage()); e.printStackTrace(); } } }
/// le main(): Interpreter i = new Interpreter();
try { PipedReader istream; PipedWriter ostream; BufferedReader input; BufferedWriter output; istream = new PipedReader(); input = new BufferedReader(istream); ostream = new PipedWriter(); output = new BufferedWriter(ostream);
/* un tas de trucs pour connecter les PipedReader et writer..*/
////////////// PS: J'ai dut mettre les flush() sinon ça ne transmettait rien
Question: Comment faire pour que ça marche, c'est à dire pour que readLine() attende qu'elle lise une ligne complète avant de retourner
Merci par avance. Tuxfighter
-- "There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened." -- Douglas Adams