View Full Version : [JAVA] Lanciare e Gestire eventi personalizzati
Ciao a tutti, sto studiando la gestione degli eventi in java 2, ma non mi è chiaro come fare per generare un evento personalizzato.
Faccio un esempio: ho un Timer che fa il countdown; quando arriva a 0 o ad un valore prestabilito vorrei lanciare un evento... come si fa? :confused:
Grazie mille in anticipo!
monkey72
21-07-2003, 23:14
approfitto per chiedere... ma l'utilizzo di eventi nella programmazione guidata da eventi non implica che ci sia l'attesa da parte del programma di un evento provocato dall'utente? quale ad esempio la pressione di un pulsante, chiusura di una finestra....
nel tuo caso non c'è l'attesa di un'azione dell'utente... :rolleyes:
no, anche se la maggior parte degli eventi viene generata da interfaccia utente, un evento può essere generato da qualunque oggetto... di questo ne sono certo.
Il problema è come fare a generarlo se non è un evento standard di java :cry:
...speriamo che qualcuno mi illumini! :)
Puoi generare tu un evento usando la classe ActionEvent e passandolo all'actionPerformed...
tuoOggetto.actionPerformed(new ActionEvent(...) );
forse sto iniziando a capire, ma non è che mi potresti fare un esempio pratico un po' più dettagliato? Te ne sarei ultra-grato!
posta tu un po' di codice e poi vediamo...
Se ti interessa ho un esercitazione che ho fatto nel corso di fondamenti di informatica all'universita. spiega proprio su come generare degli eventi personalizati. la posso mettere da qualche parte e darti un link.
ciao ;)
roby1483
22-07-2003, 21:26
Originariamente inviato da VICIUS
Se ti interessa ho un esercitazione che ho fatto nel corso di fondamenti di informatica all'universita. spiega proprio su come generare degli eventi personalizati. la posso mettere da qualche parte e darti un link.
ciao ;)
A me interesserebbe ;) .
certo che mi interessa, anche se mi sto sforzando di creare qualcosa da solo e forze ci sto riuscendo, ma un aiuto mi velocizzerebbe molto le cose!
se vuoi puoi mandarmelo anche in email!
Grazie mille...
cmq se riesco a creare qualcosa di buono posto tutto il codice qui così chi si trova nella mia condizione impara qualcosa di nuovo :)
visto che interessa a piu persone posto un link:
http://utenti.lycos.it/ilgrandepuffo/download/esercitazione06.rar
spero che vi possa essere utile.
ciao ;)
Grazie VICIOUS, mi hai dato una buona mano a capire una parte su cui avevo ancora molti dubbi, il mio cammino verso il completo dominio degli eventi è iniziato :D
cmq ho trovato anche su internet un documento molto chiaro sugli eventi personalizzati:
http://mokabyte.infomedia.it/1999/05/swing_4.htm
Vi posto il mio risultato finale, una semplice classe Timer che genera un evento TimerEvent quando lo decido io! :cool:
L'unica domanda: la classe Timer può andar bene come JavaBean?
la classe Main
public class MainTimer {
public static void main(String[] args) {
Timer t = new Timer();
//creo una classe interna anonima TimerListener
t.addTimerListener(new TimerListener() {
public void onTimer(TimerEvent te){
System.out.println("Timer = "+ te.getDelay());
}
});
t.start();
}
}
la classe Timer
import java.io.Serializable;
import java.util.*;
public class Timer implements Serializable, Runnable{
private TimerGuardian timerGuardian;
private int timeOut, noOfTimeout, time;
private Thread th;
public Timer(){
this(1000, 100);
}
public Timer(int to, int noto){
timeOut = to;
noOfTimeout = noto;
th = null;
timerGuardian = new TimerGuardian(this);
}
public int getTimeout(){
return timeOut;
}
public void setTimeout(int t){
timeOut = t;
}
public int getNoTimeout(){
return noOfTimeout;
}
public void setNoTimeout(int t){
noOfTimeout = t;
}
//il run del thread che deve generare
public void run(){
int i;
for(i = 0; i < noOfTimeout; noOfTimeout--){
{
try{
th.sleep(timeOut);
//quando arrivo a novanta stoppo e lancio un TimerEvent
if(noOfTimeout == 90) stop();
System.out.println(noOfTimeout);
} catch (Exception e) {}
}
}
timerGuardian.fireTimerEvent(0);
}
//comandi di start e stop
public void start(){
if(th == null){
th = new Thread(this);
th.start();
}
}
public void stop(){
if(th != null){
timerGuardian.fireTimerEvent(noOfTimeout);
th.stop();
th = null;
}
}
public void addTimerListener(TimerListener tl){
timerGuardian.addTimerListener(tl);
}
public void removeTimerListener(TimerListener tl){
timerGuardian.removeTimerListener(tl);
}
}
la classe TimerEvent
import java.util.*;
public class TimerEvent extends EventObject{
private int delay;
public TimerEvent(Object sorgente){
this(sorgente, 0);
}
public TimerEvent(Object sorgente, int delay){
super(sorgente);
this.delay = delay;
}
public int getDelay(){
return delay;
}
}
la classe TimerGuardian
import java.util.*;
public class TimerGuardian {
private Object sorgente;
private Vector listeners;
public TimerGuardian(Object sorgente){
this.sorgente = sorgente;
listeners = new Vector();
}
public void addTimerListener(TimerListener tl){
listeners.addElement(tl);
}
public void removeTimerListener(TimerListener tl){
listeners.removeElement(tl);
}
public void fireTimerEvent(int delay){
TimerEvent timev = new TimerEvent(sorgente, delay);
Vector copia_listeners = new Vector();
synchronized(listeners){
copia_listeners = (Vector) (listeners.clone());
}
for(int i=0; i < copia_listeners.size(); i++)
((TimerListener) (copia_listeners.elementAt(i))).onTimer(timev);
}
}
e infine l'interfaccia TimerListener
import java.util.EventListener;
public interface TimerListener extends EventListener{
public void onTimer(TimerEvent timEv);
}
"Timer.java": stop() in java.lang.Thread has been deprecated at line 68, column 10
Il programma funziona solo non capisco perchè mi da questo warning?
Se è stato reso obsoleto stop() che bisogna usare al suo posto?
Ma usare la documentazione no, eh?? :D
stop() non è più considerato sicuro... erano molte le disfunzioni ai programmi che venivano fuori...
Dai un occhio qui:
Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated? (http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html)
Spiega perchè sè stato deprecato e come ovviare (mettendo il thread a null).
Poi mi spieghi come hai scritto quel codice senza guardare la doc delle API...
monkey72
23-07-2003, 15:58
Originariamente inviato da Lancill
Se è stato reso obsoleto stop() che bisogna usare al suo posto?
http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html
l'articolo dice che l'uso non è sicuro ma che non si usa niente al suo posto ma da degli esempi su come aggiungere al codice variabili che indichino che il thread deve essere terminato.
Originariamente inviato da monkey72
http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html
l'articolo dice che l'uso non è sicuro ma che non si usa niente al suo posto ma da degli esempi su come aggiungere al codice variabili che indichino che il thread deve essere terminato.
Il tuo link non porta a nulla... Come sarebbe che non si usa niente????
monkey72
23-07-2003, 16:01
Originariamente inviato da cn73
Ma usare la documentazione no, eh?? :D
stop() non è più considerato sicuro... erano molte le disfunzioni ai programmi che venivano fuori...
dai un occhio qui:
Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated? (http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html)
Poi mi spieghi come hai scritto quel codice senza guardare la doc delle API...
cn73 nello stesso istante praticamente!!!!
lo vorrei sapere anch'io come lo ha scritto il codice :D
monkey72
23-07-2003, 16:08
Originariamente inviato da cn73
Il tuo link non porta a nulla... Come sarebbe che non si usa niente????
come non porta a nulla, porta dove porta il tuo, l'ho postato male? :( :D
monkey72
23-07-2003, 16:10
si, l'ho postato male cmq era lo stesso articolo che hai postato tu
monkey72
23-07-2003, 16:18
ora mi sembra che funge... :)
cmq volevo dire che non c'è un altro metodo che si usa al suo posto
monkey72
23-07-2003, 16:22
Originariamente inviato da cn73
Ottimo! :D
abbiamo avuto la stessa "intuizione" delle API :D
Originariamente inviato da monkey72
abbiamo avuto la stessa "intuizione" delle API :D
No...il fatto è che l'uso dei Thread è una delle cose fondamentali per un "vero" :D programmatore Java, nel senso che prima o poi ti ci scontri... e quella pagina mi ricordavo di averla raggiunta proprio leggendo le API...ritrovarla è stata questione di un secondo :D
monkey72
23-07-2003, 16:29
anch'io mi ci sono scontrata, ma in quel momento mi premeva più consegnare che togliere i warning così ce li ho lasciati!!! :D
Esercitazione all'Università? Se ero il tuo prof ti bocciavo! :nonsifa: :D
Originariamente inviato da cn73
Ma usare la documentazione no, eh?? :D
stop() non è più considerato sicuro... erano molte le disfunzioni ai programmi che venivano fuori...
Dai un occhio qui:
Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated? (http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html)
Spiega perchè sè stato deprecato e come ovviare (mettendo il thread a null).
Poi mi spieghi come hai scritto quel codice senza guardare la doc delle API...
ok grazie, è solo che sto un po' incasinato ultimamente, per questo non sono andato a cercarlo direttamente io :rolleyes: ...
per quanto riguarda la spiegazione sul codice, ho trovato quell'esempio su mokabyte, l'ho studiato per bene, l'ho capito e l'ho riscritto adattandolo ad un esercizio... che poi è uscito quasi tale è quale è un altro conto :cool:
in ogni caso non ho mai detto di non andare a guardare la doc delle api... :confused:
Originariamente inviato da cn73
Esercitazione all'Università? Se ero il tuo prof ti bocciavo! :nonsifa: :D
ho preso 30 cmq. :D
ciao ;)
monkey72
23-07-2003, 17:54
Originariamente inviato da cn73
Esercitazione all'Università? Se ero il tuo prof ti bocciavo! :nonsifa: :D
uso di thread in un'applicazione server web nell'esame di reti II... 28 ;)
Originariamente inviato da VICIUS
ho preso 30 cmq. :D
ciao ;) Non dicevo a te...ma alla signorina :D
:oink:
Originariamente inviato da monkey72
uso di thread in un'applicazione server web nell'esame di reti II... 28 ;)
:ave: :fiufiu:
[B]in ogni caso non ho mai detto di non andare a guardare la doc delle api... :confused:
Scusami Lancil...non per insistere, però...
Se uno scrive un programma imperniato sui Thread, si va a vedere doc delle API (http://java.sun.com/j2se/1.4.2/docs/api/) e come prima cosa la pagina relativa alla classe Thread (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html) . Se il compilatore mi da un Warning sul metodo stop(), vadi a vedere cosa mi viene detto a quella pagina, e trovo tutte le spiegazioni del caso...
Tutti e a tutti i livelli prendiamo spunto da codice già scritto... MokaByte poi è uno dei miei principali punti di riferimento. Il mio intento è solo quello di spingere che comincia con Java a leggere sempre la documentazione, e tu mi spiace ma in questo caso non lo hai proprio fatto ;)
monkey72
24-07-2003, 10:35
Originariamente inviato da cn73
:ave: :fiufiu:
non era un vanto... i 30 si sono sprecati a quell'esame!!!
li hanno presi gli altri xò!!! :D
monkey72
24-07-2003, 10:43
Originariamente inviato da cn73
Scusami Lancil...non per insistere, però...
Se uno scrive un programma imperniato sui Thread, si va a vedere doc delle API (http://java.sun.com/j2se/1.4.2/docs/api/) e come prima cosa la pagina relativa alla classe Thread (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html) . Se il compilatore mi da un Warning sul metodo stop(), vadi a vedere cosa mi viene detto a quella pagina, e trovo tutte le spiegazioni del caso...
Tutti e a tutti i livelli prendiamo spunto da codice già scritto... MokaByte poi è uno dei miei principali punti di riferimento. Il mio intento è solo quello di spingere che comincia con Java a leggere sempre la documentazione, e tu mi spiace ma in questo caso non lo hai proprio fatto ;)
xò come sei severo... :)
Originariamente inviato da cn73
Scusami Lancil...non per insistere, però...
Se uno scrive un programma imperniato sui Thread, si va a vedere doc delle API (http://java.sun.com/j2se/1.4.2/docs/api/) e come prima cosa la pagina relativa alla classe Thread (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html) . Se il compilatore mi da un Warning sul metodo stop(), vadi a vedere cosa mi viene detto a quella pagina, e trovo tutte le spiegazioni del caso...
Tutti e a tutti i livelli prendiamo spunto da codice già scritto... MokaByte poi è uno dei miei principali punti di riferimento. Il mio intento è solo quello di spingere che comincia con Java a leggere sempre la documentazione, e tu mi spiace ma in questo caso non lo hai proprio fatto ;)
:cry: :cry: :cry:
no cmq a parte tutto io pensavo mi accusavate di aver scopiazzato troppo...
ma per la documentazione vi riferite solo a stop o anche ad altro? E' che io sto seguendo più o meno un libro e non sempre vado a vedermi la documentazione ufficiale (e probabilmente sbaglio)...
monkey72
24-07-2003, 13:53
io ti consiglerei di vederti sempre le API, per ogni classe che usi, potrebbero esserci metodi di cui hai bisogno ma che nel libro non sono sempre riportati... e cmq ogni volta che hai un warning di deprecated sei quasi obbligato a guardarle
Originariamente inviato da monkey72
xò come sei severo... :)
Di +! Terribile! :D
Lancill non preoccuparti non intendevamo accusartiu di avere scopiazzato... se qualcuno ha già fatto una cosa che ci serve, perchè perdere tempo a rifarla??
Usa sempre le API! E il tutorial! Qualunque altro libro o risorsa è un optional ;)
ok grazie mille per l'aiuto e i consigli! Sono commosso :cry: :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.