|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2002
Messaggi: 77
|
[Java] Problema di comunicazione tra classi
Ciao a tutti,
il mio problema è relativo ad una classe che svolge il suo lavoro fino ad arrivavare alla seguente riga di codice: Codice:
new GeneraEventoNuovaVendita(idVendita, jTable1.getValoreAt(i, 2).toString(), jTable1.getValoreAt(i, 4).toString(), jTable1.getValoreAt(i, 3).toString()); Codice:
public class GeneraEventoNuovaVendita extends java.awt.Component {
/** Creates a new instance of GeneraEventoNuovaVendita */
public GeneraEventoNuovaVendita(String str, String quantita, String prezzo, String provv) {
EventQueue evq = Toolkit.getDefaultToolkit().getSystemEventQueue();
evq.postEvent(new EventoNuovaVendita(this, str, quantita, prezzo, provv));
enableEvents(0);
}
public void processEvent(AWTEvent evt){
if (evt instanceof EventoNuovaVendita)
GestoreListeners.gestisciNuovaVendita(evt);
}
}
__________________
P4 3Ghz, Zalman CNPS7000 AlCu, Abit IC7 MAX3, 1Gb Corsair TwinX, Sapphire Atlantis 9800Pro 128Mb, Maxtor 160Gb + Maxtor 60Gb + Maxtor 160Gb SATA, Pioneer DVDR 107D, LG DRD8169B, Audigy 2, Logitech Z-680, Thermaltake Xsaser III V2000A, Logitech Desktop Mx
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
![]() o ancora meglio levarlo dal costruttore e metterlo in un metodo public boolean ?
__________________
|
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Sep 2002
Messaggi: 77
|
si era la mia idea, ho fatto questa modifica:
Codice:
public class GeneraEventoNuovaVendita extends java.awt.Component {
private static boolean successo;
/** Creates a new instance of GeneraEventoNuovaVendita */
public GeneraEventoNuovaVendita(String str, String idArticolo, String quantita, String prezzo, String provv) {
EventQueue evq = Toolkit.getDefaultToolkit().getSystemEventQueue();
evq.postEvent(new EventoNuovaVendita(this, str, idArticolo, quantita, prezzo, provv));
enableEvents(0);
}
@Override
public void processEvent(AWTEvent evt) {
if (evt instanceof EventoNuovaVendita)
try {
GestoreListeners.gestisciNuovaVendita(evt);
successo = true;
} catch (AWTException ex) {
ex.printStackTrace();
successo = false;
}
}
public boolean getSuccesso() {
return successo;
}
}
__________________
P4 3Ghz, Zalman CNPS7000 AlCu, Abit IC7 MAX3, 1Gb Corsair TwinX, Sapphire Atlantis 9800Pro 128Mb, Maxtor 160Gb + Maxtor 60Gb + Maxtor 160Gb SATA, Pioneer DVDR 107D, LG DRD8169B, Audigy 2, Logitech Z-680, Thermaltake Xsaser III V2000A, Logitech Desktop Mx
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Jan 2003
Città:
Messaggi: 4421
|
...un esempio vale piu' di mille parole...
...classe principale... Codice:
public class ClassePrincipale {
public static void main(String[] args) {
new ClassePrincipale();
}
public ClassePrincipale(){
ClasseFunzione classeFunzione = new ClasseFunzione();
//eseguo il metodo della classe funzione
classeFunzione.metodoClasseFunzione();
//eseguo lo stesso metodo e scrivo a console il valore restituito
System.out.println(classeFunzione.metodoClasseFunzione());
}
}
Codice:
public class ClasseFunzione {
public ClasseFunzione(){
}
public boolean metodoClasseFunzione(){
boolean fatto = true;
System.out.println("faccio cose,vedo persone");
return fatto;
}
}
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Sep 2002
Messaggi: 77
|
si..il tuo esempio non fa una piega ed è quello che sto tentando di fare...adesso ho fatto loggare cosa succede,
nella classe principlale: Codice:
GeneraEventoNuovaVendita b = new GeneraEventoNuovaVendita(idVendita, jTable1.getValoreAt(i, 0).toString(), jTable1.getValoreAt(i, 2).toString(), jTable1.getValoreAt(i, 4).toString(), jTable1.getValoreAt(i, 3).toString());
Misc.logga("dopo Genera: " + new Boolean(b.getSuccesso()));
if (b.getSuccesso())
scaricato=true;
}
Codice:
public void processEvent(AWTEvent evt) {
if (evt instanceof EventoNuovaVendita)
try {
GestoreListeners.gestisciNuovaVendita(evt);
successo = true;
done = true;
Misc.logga("successo nel try: " + new Boolean(successo).toString());
} catch (AWTException ex) {
ex.printStackTrace();
successo = false;
done =true ;
Misc.logga("successo nel catch: " + new Boolean(successo).toString());
}
}
public boolean getSuccesso() {
Misc.logga("successo in getSuccesso(): " + new Boolean(successo).toString());
return successo;
}
quello che mi viene loggato per me è parecchio strano, ed è: Codice:
13.03.2009 16:55:12 -- successo in getSuccesso(): false 13.03.2009 16:55:12 -- dopo Genera: false 13.03.2009 16:55:12 -- successo in getSuccesso(): false 13.03.2009 16:55:15 -- successo nel try: true
__________________
P4 3Ghz, Zalman CNPS7000 AlCu, Abit IC7 MAX3, 1Gb Corsair TwinX, Sapphire Atlantis 9800Pro 128Mb, Maxtor 160Gb + Maxtor 60Gb + Maxtor 160Gb SATA, Pioneer DVDR 107D, LG DRD8169B, Audigy 2, Logitech Z-680, Thermaltake Xsaser III V2000A, Logitech Desktop Mx
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Prova un po' senza dichiare successo come static.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Sep 2002
Messaggi: 77
|
si ho provato pure quello ma non cambia nulla..sembra che l'esecuzione del programma vada oltre la GeneraEventoNuovaVendita se aspettarne la completa esecuzione...........
__________________
P4 3Ghz, Zalman CNPS7000 AlCu, Abit IC7 MAX3, 1Gb Corsair TwinX, Sapphire Atlantis 9800Pro 128Mb, Maxtor 160Gb + Maxtor 60Gb + Maxtor 160Gb SATA, Pioneer DVDR 107D, LG DRD8169B, Audigy 2, Logitech Z-680, Thermaltake Xsaser III V2000A, Logitech Desktop Mx
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
dipende da quando viene chiamato dall'esecutore il metodo processEvent immagino....
__________________
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Uhm, può essere che il tuo evento venga processato all'istante proprio perchè va a finire nella AWT Event Queue che magari in quel momento è vuota o quasi e AWT Event Thread in esecuzione ne esegue immediatamente il dispatch (chiama il tuo metodo che è l'override di processEvent della classe Component)
Però la tua classe/oggetto evento dovrebbe comunque avere il booleano interno già bello e inizializzato solo che a quel punto hai sia il tuo thread in esecuzione in accesso all'oggetto che l'AWT Event Thread che vuole modificarne lo stato. Non so bene se lo scenario è questo... In ogni caso io invece di estendere la classe Component per fare l'override di processEvent e inserire l'oggetto-evento con postEvent avrei optato per un altro approccio: dal mio thread di esecuzione avrei codificato l'evento "NuovaVendita" nell'l'impementazione del metodo run di un Runnable (un altro thread) che avrei accodato nella AWT Event Queue mediante il metodo invokeLater (nel solito modo insomma).
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#10 | |
|
Member
Iscritto dal: Sep 2002
Messaggi: 77
|
Quote:
__________________
P4 3Ghz, Zalman CNPS7000 AlCu, Abit IC7 MAX3, 1Gb Corsair TwinX, Sapphire Atlantis 9800Pro 128Mb, Maxtor 160Gb + Maxtor 60Gb + Maxtor 160Gb SATA, Pioneer DVDR 107D, LG DRD8169B, Audigy 2, Logitech Z-680, Thermaltake Xsaser III V2000A, Logitech Desktop Mx
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:37.





















