[Java lista] java program folyamatok
   
     bognár attila     
     attila at netalfa.hu
       
    2007. Jún. 15., P, 23:15:44 CEST
    
    
  
> public class Adatbazis extends Thread {
>     public void run() {
>         while(true) {
>             System.out.println("Adatbázis...");
>            
>             /**
>              * Nincs a közelben elérhető adatbázis, de tesztelni 
> viszont kell?
>              */
>             fakeDb = true;
>            
>             if(fakeDb) {
>                 hallgato = new HallgatoObj();
>                 szerver.lehetsegesHallgatokZarolva = true;
ez hol lesz false és mi a célja? vagy csak a jövőre vonatkozóan van? 
valami szinkronizálás mindenesetre nem ártana
nem tudom, hogy fejlődik tovább az alkalmazás, de ez nem túlságosan 
objektum orientált.
>                 szerver.lehetsegesHallgatok.clear();
>                 /**
>                  * Egy fake gynagy hozzáadása
>                  */
>                 hallgato.beallitAdatok("1", "Nagy", "György", "", 
> "nnnnn", "", "061234356478", "gynagy", "0630485738495", 
> "nagygyorgy at freemail.hu <mailto:nagygyorgy at freemail.hu>", "t", "t", 
> "t", "t", "t", "t", "t", "t");
>                 szerver.lehetsegesHallgatok.addElement(hallgato);
>                
>                 /**
>                  * Egy fake szoba hozzáadása
>                  */
>                 szerver.lehetsegesSzobakZarolva = true;
lásd hallgatók.
>                 szerver.lehetsegesSzobak.clear();
>                     /**
>                      * Lehetséges szobák hozzáadása a szerverhez
>                      */
>                     szoba = new SzobaObj();
>                     szoba.beallitAdatok("1", "Próba tanfolyam", "Ez 
> egy próba tanfolyam bla bla...", "1");
>                     szerver.lehetsegesSzobak.addElement(szoba);
>                     szoba = null;
>                    
>                 } else {ugyanez, csak adatbázisból}
ez ugyebár le sem fordul...
>                 try {
>                     System.out.println("Adatbázis vége...");
>                     sleep(10000);
>                 } catch (InterruptedException ex) {
>                     ex.printStackTrace();
>                 }
azt tudod, hogy ide nem jön be? azaz elvileg a cpu/mag 100%-on fut
> public class ChatHandler extends Thread {
 >    static Vector handlers = new Vector( 10 );
ennek mi a szerepe? csak belepakolsz és kiveszel.
a ChatServer.objektumok is gondolom hasonló célt szolgál (bár jelenleg 
az sincs kihasználva, ha jól látom)
  
>     public ChatHandler(Socket socket, ChatServer _szerver) throws 
> IOException {
>        
>         dout = new DataOutputStream( socket.getOutputStream() );
>        
>         in = new BufferedReader(
>                 new InputStreamReader(socket.getInputStream()));
>         out = new PrintWriter(
>                 new OutputStreamWriter(socket.getOutputStream()));
itt azért illene karakterkódolást is megadni, különben jönnek a 
meglepetések (azaz már az elején fel kell készülni valamilyen módon, 
ebben a formában nagyon alattomos)
emellett nem biztos, hogy szerencsés dolog két helyről írkálni ugyanabba 
a folyamba.
>     public void run() {
>         String uzenet;
>         synchronized(handlers) {
>             handlers.addElement(this);
>         }
itt miért van szinkronizálás?
>         try {
>     
>         } catch(IOException ioe) {
>             /**
>              * Ha hiba van az azért történik, mert elvágta egy markoló 
> a hálózati kábelt. KHM!
>              */
>             System.out.println("Megszakadt a kapcsolata...");
egy stack trace azért nem ártana...
>         } finally {
>             try {
>                 /**
>                  * Rendes kilépés, vagy hiba esetén lezárjuk a 
> kapcsolatot...
>                  */
>                 System.out.println("Kapcsolat lezárása...");
>                 in.close();
>                 out.close();
>                 socket.close();
>                 szerver.objektumok.remove(this);
ez utóbbihoz nem biztos, hogy eljut, ránézésre fontos lenne: ezzel 
kellene kezdeni a finally-t: a szerver legyen tiszta, a többi magánügy 
(megint nem igazán objektum orientált)
>             } catch(IOException ioe) {
>             } finally {
na ez az, amit nagyon nem illik:lenyelni egy kivételt. emiatt abszolút 
nem tudsz arról,hogy a szerver.objektumok.remove(this) nem hajtódott 
végre - max következtethetsz rá
>                 synchronized(handlers) {
>                     handlers.removeElement(this);
>                 }
itt megint nem értem a szinkronizálást.
 
> public class ChatServer {
>     public ChatServer() {
>         new Ping(this).start();
ez micsoda?
>         new Adatbazis(this).start();
>         try {
>             /**
>              * Végtelen ciklusban figyel, és ha valaki kapcsolódik, 
> nyit egy új
>              * ChatHandler-t
>              */
>             serverSocket = new ServerSocket(port);
>             while(true) {
>                 socket = serverSocket.accept();
>                 ChatHandler handler = new ChatHandler(socket, this);
>                 handler.start();
>                 objektumok.addElement(handler);
itt is rossz a sorrend: először regisztrálnám, utána indítanám. ha 
rögtön kivétellel kezd, elképzelhető, hogy elszállt a handler, de te 
utána regisztrálod.
>             }
>         } catch(IOException ioe) {
>             ioe.printStackTrace();
>         } finally {
ilyen kellene feljebb is
ezeket nézd át, valamint minden run ilyen legyen:
public void run ()
{
    try
    {
       // ami most a tartalma
    }
    finally
    {
       System.err.println("run vege");
    }
}
így meggyőződhetesz arról, hogy melyik szál fut le, melyik nem. 
ezenkívül vegyél ki néhány sallangot (redukáld a kódot), talán 
áttekinthetőbb lesz, mikor mi történik.
hogy néz ki a kapcsolódó kliens? (a ChatHandlernél ha a két if közül 
egyik sem teljesül a bejövőre, akkor szép csendben kering magában)
kiírja a kapcsolat megszakadt vagy bezárása üziket?
attila
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20070615/e00f3f08/attachment.html 
    
    
További információk a(z) Javalist levelezőlistáról