G
Guest
Gast
Hallo ich habe mal ne frage zu meinem Programm, Ziel ist es einen String über ein und den selben Channel zu senden und zu empfangen, für jeden Stringtoken Soll ein neuer thread gestartet werden welcher den String an den Channel sendet, wenn dieser nun belegt ist, soll ChannelTest diesen auslesen und ausgeben, aber irgendwo Verklemmt er sich immer (auch an unterschiedlichen stellen) weiss da jemand vielleicht eine Lösung?? Komme da grade echt nicht weiter...
Code:
import java.util.*;
public class ChannelTest implements Runnable {
public static Channel channel = new Channel(); ;
protected static String arg;
boolean fertig=false;
static int count;
static int recCount=1;
public ChannelTest(String arg){
this.arg=arg;
}
public void run(){
while (fertig==false){
try{
if(!channel.getStatus()){
String s=this.channel.recive().toString();
System.out.println(s);
recCount++;
if(count==recCount){
fertig=true;
}
}else{}
}catch(InterruptedException e){}
}
}
public static void main(String[] args) {
ChannelTest test = new ChannelTest("Dies ist ein wohldurchdachter Test");
StringTokenizer tokken = new StringTokenizer(arg);
count=tokken.countTokens();
for(int i=0;i<count;i++){
new Thread(new MySender(tokken.nextToken(),channel)).start();
//System.out.println(recCount);
//System.out.println(count);
}
test.run();
}
}
///////////////////////////////////////////////////////////////////
import java.util.*;
public class Channel {
Object o = new Object();
protected Object message = null;
synchronized boolean getStatus(){return message==null;}
public void waitfor()throws InterruptedException{
wait();
}
synchronized public void send(Object o)throws InterruptedException{
this.message = o;
//System.out.println(o.toString());
notifyAll();
wait();
}
synchronized public Object recive()throws InterruptedException{
o=message;
message = null;
notifyAll();
//System.out.println("recive"+o.toString());
return o;
}
}
/////////////////////////////////////////////////////////////////////////////
import java.util.*;
public class MySender extends Thread{
private String s;
private Channel c;
public MySender(String s,Channel c){
this.s=s;
this.c=c;
}
public void run(){
boolean gesendet=false;
try{
while(gesendet==false){
if(c.message==null){
gesendet=true;
c.send(s);
//c.waitfor();
}else{
}
}
}catch(InterruptedException e){System.out.println("ERROR SEND");}
}
}