Newsgroup: it.comp.java
Titolo: Comunicare tra due classi, e problemi di thread (urgente se potete, grazie)

Salve a tutti.
Programmo in Java utilizzando il framework Cocoa  per applicazioni
native OS X. Non so se conoscete, ma credo che il problema sia di
natura più generale, quindi confido in un vostro aiuto.
Ho due classi. Una é un socket IRC (socketIRC) e l'altra gestisce gli
eventi e contiene gli oggetti dell'interfaccia (campi, liste etc etc).
Ora vorrei provare ad impostare dal socket (instanziato quando si preme
un pulsante, ndr. contenuto nella seconda classe, con le istruzioni
socketIRC x = new SocketIRC(); x.main();) il testo di una label la cui
dichiarazione é nella seconda classe.
Ho provato semplicemente inserndo import classe e provando ad
impostarne il valore. Niente, mi da un errore tipo "non static variable
status cannot be referenced from a static context"... Ho provato quindi
ad impostare l'oggetto (status appunto) come public static. A questo
punto sembra tutto ok, ma quando provo a cliccare sul pulsante che fa
girare il codice... bam... java.lang.NullPointerException...e salta
tutto... Avete idee? Insomma come faccio far comunicare due classi!!!
:°°
Un'altra domanda... il mio socket irc ha nel metodo main un while(1)
(perenne) che vede se ci sono dati nell'input stream del socket, ed
eventualmente li analizza. Una volta ke instanzio il socket e inizia a
girare, non posso fare più nient'altro nel programma...cliccare etc
etc... come posso far girare il processo in background, o se mai in
un'altro thread (giusto?)?
Grazie a tutti ancora,
malcom
-- 
mal...@macINTOSH.com


Hai un thread in ascolto sul socket nel main (chè è static) e quindi da
lì ti puoi riferire solo a variabili statiche!
 Prova a trasferire il ciclo while fuori dal main in un metodo non-static
e a quel punto potrai accedere alla variabile "status" !
P.S.
Anch'io mi trovo molto spesso in questi frangenti (secondo me da newbie
della OOP, per non dire di più). Per ora le cose che ho capito riguardo
alla comunicazione fra oggetti sono essenzialmente:
1) Se A vuole comunicare con B per forza deve avere un membro di tipo
    B e riferirsi a quello per chiamare i metodi di B
2) B deve fornire metodi static per consentire agli altri di accedere
alle sue funzioni ( ma questo approccio, che è quello più semplice,
porta inevitabilmente ad un proliferare di membri e metodi static !)
scusate se le ho esposte in modo così sbrigativo e poco preciso :-)

 porta inevitabilmente ad un proliferare di membri e metodi static !)
No. Se tu vuoi chiamare metodi con B.metodo, allora è così; ma se A ha una
variabile di tipo B:
B ogg=new B();
allora può chiamare ogg.metodo sia se metodo è statico(ma non si fa di
solito) sia se non lo è.
Ciao
--
Paolo Giarrusso
Per rispondere togliere solo "TOGLIMI" dall'indirizzo, non _spam.

Grazie ad entrambi per la risposta. Perň volevo sapere (a parte il
problema del NUllPointer), qualcosa di piů su come creare un thread.
In effetti avrei bisogno di creare un thread e farci girare il codice
del socket (ovvero la classe istanziata). Come posso fare?
Grazie a tutti ancora,
Ciao

del socket (ovvero la classe istanziata). Come posso fare?
[CUT]
Qui trovi tutto
http://java.sun.com/docs/books/tutorial/essential/threads/index.html
-- 
Ciao
	Fabrizio C.

 
http://java.sun.com/docs/books/tutorial/essential/threads/index.html
Fammi capire... da un esempio:
public class SimpleThread extends Thread {
    public SimpleThread(String str) {
        super(str);
    }
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i + " " + getName());
            try {
                sleep((long)(Math.random() * 1000));
            } catch (InterruptedException e) {}
        }
        System.out.println("DONE! " + getName());
    }
}
In pratica per fare un thread dovrei creare la classe che voglio sia
"threaddata" (madò ke schifezza...Storpiamento lingua +300) con extends
Threa. Ma poi quando la istanzio altrove...come faccio a far partire il
thread?
Scusa l'ignoranza,
grazie
-- 
Daniele "Malcom"
Software Developer for MacOS X
malcom...@liberoOOOOO.it

thread?
Mi spiace ma prorpio non riesco a capire la domanda: prova a 
riformularla.
-- 
Ciao
	Fabrizio C.

 riformularla.
Ok mettiamo ke ho una classe che si chiama SocketIRC.
La istanzio con SocketIRC x = new SocketIRC();... come posso metterla
nel thread e farlo partire? Mi dai un piccolo esempio cosě per capire,
grazie!


nel thread e farlo partire? Mi dai un piccolo esempio così per capire,
Perché vuoi farmi fare la fatica di riscrivere cose già scritte (e 
bene)? ;-)
http://java.sun.com/docs/books/tutorial/essential/threads/customizing.h
tml
HTH
-- 
Ciao
	Fabrizio C.