Avatar billede azazzs Nybegynder
03. maj 2006 - 13:42 Der er 18 kommentarer og
1 løsning

IO input listner

hvis jeg har en inputstream er der så ikke andere måder man kan lytte på input andet end f.eks.

String Requst = in.readLine(); //her stopper programmet jo

findes der ikke en måde hvor på man kan få det som et event istedet. :)
Avatar billede mikkelbm Nybegynder
03. maj 2006 - 13:53 #1
Du kan lave en tråd der kører og spørger på om der er data tilgængelig.
Avatar billede mikkelbm Nybegynder
03. maj 2006 - 13:57 #2
En hurtig skitsering:

public interface IDataAvailable
{
  public void dataAvailable (String data);
}

public ListenerThread extends Thread
{
    public ListenerThread ()
    {
   
    }
 
    public void addListener (IDataAvailable listener)
    { // Fyld i en liste
    }

    public void run ()
    {
        while (running)
        {
            String data = in.readLine();
            publishData (data);
        }
    }
   
    private void publishData (String data)
    {
        for (int i = 0; i < listeners.Size(); i++)
            ((IDataAvailable)listeners.get (i)).dataAvailable (data);
    }
}
Avatar billede azazzs Nybegynder
03. maj 2006 - 13:59 #3
hmm jeg har allerede denne kørende i en tråd så det gør faktisk ikke så meget den stopper, problemet er mere at jeg har lagt mærke til at den kører vildt i loop et par gange før den stopper
Avatar billede azazzs Nybegynder
03. maj 2006 - 14:00 #4
hmm tak det kigger jeg på
Avatar billede mikkelbm Nybegynder
03. maj 2006 - 14:00 #5
Ikke forstået - 'vildt i loop' ?

Hvad er det du gerne vil opnå?
Avatar billede azazzs Nybegynder
03. maj 2006 - 14:09 #6
jeg har en tråd kørende ved siden af mit hoved program der står og lytter, og så vidt jeg ved vil tråden fryse når den når request = in.readLine(); hvor den vil vente på input, problemet er så at det virker også første gang tråden står og venter, men når der så kommer noget på input og den har kørt if sætingen 1 gang fryser den ikke igen med det samme så kører den if sætningen igen og igen og igen et par gange før den så står og venter ved request igen. 


    while(true){
                      try{
                      request = in.readLine();
                      System.out.println(request);



                          if (request.equals("1223")) {

                              String[] s = Listfiles.fileslist();
                              String names = "";
                              for(int i = 0; i< s.length; i++) {
                                  names = names + "*" + s[i];
                              }
                           
                              out.write(names.concat("\n"));
                              out.flush();
                              request = "";




                              //System.out.println(Listfiles.fileslist());
                          } else {
                              System.out.println("ahhh#elfnl");

                          }
                      }
                  catch(Exception e){

              }

      }  }
Avatar billede mikkelbm Nybegynder
03. maj 2006 - 14:15 #7
Det er kun en tråd hvis det bliver kørt i en run-metode og du extender Thread eller implementerer interfacet Runnable! Se mit eksempel.

Hvis du bare kører et loop, som noget kunne tyde på, så vil den fryse, ja...
Avatar billede azazzs Nybegynder
03. maj 2006 - 14:30 #8
jeg kører det hele i en runnable tråd, det er ikke det, mit problem er at den kører if løkken mange gange før den står og venter igen hehe det må den ikke
Avatar billede mikkelbm Nybegynder
03. maj 2006 - 14:35 #9
Hvad læser du fra? Fil, netværk ?
Avatar billede mikkelbm Nybegynder
03. maj 2006 - 14:37 #10
Din if-sætning kan og vil kun blive kørt, så længe der er noget at læse fra din inputstream.
Avatar billede azazzs Nybegynder
03. maj 2006 - 15:04 #11
det skal også kun virke når der kommer noget ind fra netværket, men problemet er så at den faktisk kører ca 5 6 gange i loop (uden at der komer noget input) inden den så står og venter ved request igen
Avatar billede arne_v Ekspert
03. maj 2006 - 15:08 #12
jeg antager at det er sockets

java har siden 1.4 haft noget funktionalitet i java.nio til at selecte
fra flere sockets fra en enkelt traad
Avatar billede azazzs Nybegynder
03. maj 2006 - 15:11 #13
jep det er sockets, findes der ikke en event listner til java sockets andet end readLIne();
Avatar billede mikkelbm Nybegynder
03. maj 2006 - 15:17 #14
"(uden at der komer noget input) inden den så står og venter ved request igen"

Mig bekendt kan det ikke lade sig gøre. readLine vil først returnere, når der kommer noget input eller der bliver smidt en exception. Prøv eventuelt at udskrive den exception du fanger i catch.
Avatar billede arne_v Ekspert
03. maj 2006 - 15:20 #15
Avatar billede azazzs Nybegynder
03. maj 2006 - 15:22 #16
hmm ja det er nemlig lidt mærkeligt jeg kan heller ik forstå det, også der for jeg ville høre om der var nogen anden smart måde det kunne laves på
Avatar billede arne_v Ekspert
03. maj 2006 - 15:22 #17
Avatar billede azazzs Nybegynder
03. maj 2006 - 15:34 #18
wow hehe det skulle jeg havde vidst fra starten arne hehe, men tak så skal jeg lige have læst en masse :)
Avatar billede arne_v Ekspert
03. maj 2006 - 15:47 #19
java.nio er ikke helt nemt

og det er ikke en universel loesning paa alt

men for visse specielle typer af problemer er det meget nyttigt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester