Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
Nelle ultime settimane abbiamo provato tre delle proposte top di gamma di NZXT nelle categorie case, dissipatori e ventole. Rispettivamente, parliamo dell'H9 Flow RGB+, Kraken Elite 420 e F140X. Si tratta, chiaramente, di prodotti di fascia alta che si rivolgono agli utenti DIY che desiderano il massimo per la propria build. Tuttavia, mentre i primi due dispositivi mantengono questa direzione, le ventole purtroppo hanno mostrato qualche tallone d'Achille di troppo
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-10-2007, 09:40   #1
ally
Bannato
 
L'Avatar di ally
 
Iscritto dal: Jan 2003
Città:
Messaggi: 4423
[Java] eventi...

...come da titolo...avrei la necessità di creare due o piu' classi in grado di ricevere e segnalare cambi di stato o variazioni di valori su alcune variabili...è possibile una soluzione biunivoca o gli eventi sono solo monodirezionali?...

...grazie...
ally è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 10:03   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da ally Guarda i messaggi
avrei la necessità di creare due o piu' classi in grado di ricevere e segnalare cambi di stato o variazioni di valori su alcune variabili
Se per "variabili" intendi proprio una classica variabile es. int a; di per sé non puoi ottenere delle "notifiche" al cambiamento del valore. Al massimo puoi fare in modo che l'assegnazione di un valore alla variabile sia fattibile solo attraverso un apposito metodo "setter" e in tal caso puoi certamente sapere quando avviene il set.
Se non è questo che chiedi, spiega meglio.

Quote:
Originariamente inviato da ally Guarda i messaggi
è possibile una soluzione biunivoca o gli eventi sono solo monodirezionali?...
Ma di "eventi" parli in generale o in modo particolare dei "listener" usati principalmente nelle interfacce grafiche?? Anche qui non è chiaro, scusa se lo dico.

In ogni caso, la notifica di un "evento" (e qui parlo in generale) è gestibile tipicamente attraverso l'uso delle interfacce. Poi si può stabilire se la notifica debba essere fatta ad 1 solo oggetto o a più oggetti (come nel caso dei listeners) che implementano una determinata interfaccia.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 10:19   #3
ally
Bannato
 
L'Avatar di ally
 
Iscritto dal: Jan 2003
Città:
Messaggi: 4423
...stavo prendendo spunto da un esempio postato proprio qui qualche mese fa...

Codice:
public class BongoEvent extends EventObject {
	
    public BongoEvent(Object source) { 
    	
    	super(source); 
    	
    	System.out.println("wow");
    
    }
}

public interface BongoEventListener extends EventListener {
	
	
    void bongoEventPerformed(BongoEvent e);
    
}

public class Evento {

    private ArrayList listeners = new ArrayList();

    private void fireBongoEvent() {
        BongoEvent event = new BongoEvent(this);
       
        for(int i = 0; i < listeners.size(); i++) {
            ((BongoEventListener)listeners.get(i)).bongoEventPerformed(event);
        }
    }

   public static void main(String args[]){
    	
    	Evento evento = new Evento();
    	try{
    	Thread.sleep(1000);
    	}catch(Exception e){}
    	evento.fireBongoEvent();
    	
    }
}
...e fin qui ci sono...il mio problema è rendere la cosa possibilmente biunivoca e che sottenda un numero maggiore di classi che invochino l'evento...

...grazie...ciao...
ally è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 10:38   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da ally Guarda i messaggi
...stavo prendendo spunto da un esempio postato proprio qui qualche mese fa...
Sì, è proprio il concetto dei listeners (non vedo add/remove dei listener ma è chiaro).

C'è una interfaccia che definisce il "contratto", c'è un oggetto che definisce l'evento e un oggetto che fa da "sorgente" e che ha una lista degli ascoltatori da notificare.

Questo è appunto lo stile della gestione degli eventi usati nelle interfacce grafiche. Ma nulla di vieta di fare in altro modo, sempre con le interfacce.
Cioè, per capirci, questa è solo la forma specifica usata nelle interfacce grafiche.

Quote:
Originariamente inviato da ally Guarda i messaggi
il mio problema è rendere la cosa possibilmente biunivoca e che sottenda un numero maggiore di classi che invochino l'evento...
Cioè vuoi che oggetti diversi possano fare il "fire" dell'evento? Se l'oggetto ha appunto un metodo per fare il fire dell'evento, non vedo il problema, chiamalo da dove vuoi.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 10:53   #5
ally
Bannato
 
L'Avatar di ally
 
Iscritto dal: Jan 2003
Città:
Messaggi: 4423
Quote:
Originariamente inviato da andbin Guarda i messaggi
Cioè vuoi che oggetti diversi possano fare il "fire" dell'evento? Se l'oggetto ha appunto un metodo per fare il fire dell'evento, non vedo il problema, chiamalo da dove vuoi.
...il mio problema è che diversi eventi lanciati da diverse classi arrivino ad una sola classe...l'ipotetica BongoEvent dovrebbe percio' essere in grado di ricevere diverse tipologie di event...

...sto forse sbagliando io?...è possibile assegnare informazioni all'evento generato?...

...ciao...
ally è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 11:02   #6
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Aggiungi a BongoEvent un metodo del tipo
Codice:
public void notifyMe(Object o) {...}
che chiamerai dalle varie classi che devono comunicargli qualcosa.
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 11:03   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da ally Guarda i messaggi
il mio problema è che diversi eventi lanciati da diverse classi arrivino ad una sola classe...l'ipotetica BongoEvent dovrebbe percio' essere in grado di ricevere diverse tipologie di event...
Qui c'è da capire quali/quanti tipi di eventi. Intendo dire, per fare un paragone con gli eventi AWT/Swing: devi avere una interfaccia che definisce diversi metodi (es. come mouseClicked, mouseReleased ecc...) o il metodo è 1 solo ma può ricevere oggetti di tipo (un sottotipo, chiaramente) diverso?

Poi dove vuoi memorizzare il reference all'oggetto che riceve le notifiche? Puoi memorizzarlo in ogni classe che fa da sorgente (così tecnicamente sarebbe possibile avere destinatari diversi ... ma non ti serve) o memorizzarlo in un oggetto ben specifico?
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 11:10   #8
Guille
Member
 
L'Avatar di Guille
 
Iscritto dal: Dec 2004
Città: Una palla di fango abitata da scimmie sognatrici
Messaggi: 128
Quote:
Originariamente inviato da ally Guarda i messaggi
...il mio problema è che diversi eventi lanciati da diverse classi arrivino ad una sola classe...l'ipotetica BongoEvent dovrebbe percio' essere in grado di ricevere diverse tipologie di event...

...sto forse sbagliando io?...è possibile assegnare informazioni all'evento generato?...

...ciao...
Citando andbin
Quote:
C'è una interfaccia che definisce il "contratto", c'è un oggetto che definisce l'evento e un oggetto che fa da "sorgente" e che ha una lista degli ascoltatori da notificare.
devi prima chiarirti quali sono questi eventi e quali informazioni devono portarsi dietro dopo di che nessuno ti impedisce di definire un'interfaccia ed uno o piu eventi in funzione delle tue esigenze.

Ad esempio:
Codice:
public class MyEventoA extends EventObject {
    int a;
    public MyEventoB(Object source, int a) { 
    	super(source); 
	this.a = a;
    }
}

public class MyEventoB extends EventObject {
    String msg;
    public MyEventoB(Object source, String msg) { 
    	super(source); 
	this.msg;
    }
}

// .. quanti ne vuoi

public interface MyMultyEventListener {
	public void performedEvantoA(MyEventoA e);
	public void performedEvantoB(MyEventoB e);
        ..... // quanti ne vuoi
}
La classe che deve ricevere i vari eventi implementa l'interfaccia MyMultyEventListener mentre ciascuna delle classi che lancia il singolo evento implementa un metodo fireMyEvento<X>().
__________________
"Contro la stupidità gli stessi dei lottano invano" Friedrich Schiller
"Chi rinuncia alla libertà per raggiungere la sicurezza non merita né la libertà né la sicurezza" Benjamin Franklin
"Guardati dalla furia di un uomo tranquillo" John Dryden
Guille è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 11:12   #9
ally
Bannato
 
L'Avatar di ally
 
Iscritto dal: Jan 2003
Città:
Messaggi: 4423
Quote:
Originariamente inviato da lovaz Guarda i messaggi
Aggiungi a BongoEvent un metodo del tipo
Codice:
public void notifyMe(Object o) {...}
che chiamerai dalle varie classi che devono comunicargli qualcosa.
...un contenitore da riempire prima di scatenare l'evento?...non rischio problemi di concorrenza?...

Quote:
Originariamente inviato da andbin Guarda i messaggi
Qui c'è da capire quali/quanti tipi di eventi. Intendo dire, per fare un paragone con gli eventi AWT/Swing: devi avere una interfaccia che definisce diversi metodi (es. come mouseClicked, mouseReleased ecc...) o il metodo è 1 solo ma può ricevere oggetti di tipo (un sottotipo, chiaramente) diverso?

Poi dove vuoi memorizzare il reference all'oggetto che riceve le notifiche? Puoi memorizzarlo in ogni classe che fa da sorgente (così tecnicamente sarebbe possibile avere destinatari diversi ... ma non ti serve) o memorizzarlo in un oggetto ben specifico?
...non è possibile creare degli eventi custom?...il problema sarebbe notificare il funzionamento di un player esterno ad una classe madre...a questo pero' si agganciano altre classi che periodicamente notificano richieste di diversa natura...dall'alzare/abbassare il volume...al cambiare il file che il player sta visualizzando...e via dicendo...quindi avrei la necessitò che la classe madre riceva le diverse notifiche da tutte queste sorgenti e si comporti di conseguenza...nessuna interfaccia grafica...nessun evento legato a mouse o tastiera...

...grazie...ciao...
ally è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 11:25   #10
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Quote:
Originariamente inviato da ally Guarda i messaggi
...un contenitore da riempire prima di scatenare l'evento?...non rischio problemi di concorrenza?...
Quali problemi? Un oggetto "notificante" crea un contenitore, e lo passa al metodo
della classe "notificata" (in effetti mi sono spiegato male, questo metodo non
andrebbe in una classe "evento", ma proprio nella classe che deve ricevere l'evento).
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 11:37   #11
ally
Bannato
 
L'Avatar di ally
 
Iscritto dal: Jan 2003
Città:
Messaggi: 4423
Quote:
Originariamente inviato da Guille Guarda i messaggi
Citando andbin

devi prima chiarirti quali sono questi eventi e quali informazioni devono portarsi dietro dopo di che nessuno ti impedisce di definire un'interfaccia ed uno o piu eventi in funzione delle tue esigenze.

Ad esempio:
Codice:
public class MyEventoA extends EventObject {
    int a;
    public MyEventoB(Object source, int a) { 
    	super(source); 
	this.a = a;
    }
}

public class MyEventoB extends EventObject {
    String msg;
    public MyEventoB(Object source, String msg) { 
    	super(source); 
	this.msg;
    }
}

// .. quanti ne vuoi

public interface MyMultyEventListener {
	public void performedEvantoA(MyEventoA e);
	public void performedEvantoB(MyEventoB e);
        ..... // quanti ne vuoi
}
La classe che deve ricevere i vari eventi implementa l'interfaccia MyMultyEventListener mentre ciascuna delle classi che lancia il singolo evento implementa un metodo fireMyEvento<X>().
...mh...non mi è chiara l'idea...non sono le classi MyEventoA e MyEventoB che ricevono l'evento?...

...ciao...
ally è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 11:38   #12
Guille
Member
 
L'Avatar di Guille
 
Iscritto dal: Dec 2004
Città: Una palla di fango abitata da scimmie sognatrici
Messaggi: 128
Quote:
Originariamente inviato da ally Guarda i messaggi
...un contenitore da riempire prima di scatenare l'evento?...non rischio problemi di concorrenza?...



...non è possibile creare degli eventi custom?...il problema sarebbe notificare il funzionamento di un player esterno ad una classe madre...a questo pero' si agganciano altre classi che periodicamente notificano richieste di diversa natura...dall'alzare/abbassare il volume...al cambiare il file che il player sta visualizzando...e via dicendo...quindi avrei la necessitò che la classe madre riceva le diverse notifiche da tutte queste sorgenti e si comporti di conseguenza...nessuna interfaccia grafica...nessun evento legato a mouse o tastiera...

...grazie...ciao...
Certo, in effetti potrebbe anche non essere necessario definire un evento.
Ad esempio nel tuo caso potresti definire ed implementare:
Codice:
public interface MyListener {
     public void incrementaVolume(int incremento);
     public void nuovoFile(String filePath);
}
Fondamentale è che tu chiarisca per bene quali sono le relazioni a livello di notifiche che intercorrono fra i vari oggetti che compongono l'insieme della tua applicazione.
__________________
"Contro la stupidità gli stessi dei lottano invano" Friedrich Schiller
"Chi rinuncia alla libertà per raggiungere la sicurezza non merita né la libertà né la sicurezza" Benjamin Franklin
"Guardati dalla furia di un uomo tranquillo" John Dryden
Guille è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 11:41   #13
Guille
Member
 
L'Avatar di Guille
 
Iscritto dal: Dec 2004
Città: Una palla di fango abitata da scimmie sognatrici
Messaggi: 128
Quote:
Originariamente inviato da ally Guarda i messaggi
...mh...non mi è chiara l'idea...non sono le classi MyEventoA e MyEventoB che ricevono l'evento?...

...ciao...
No quelli sono esempi di eventi, diversi fra loro e con eventuali informazioni aggiuntive, che la classe che implementa l'interfaccia MyMultyEventListener puo ricevere
__________________
"Contro la stupidità gli stessi dei lottano invano" Friedrich Schiller
"Chi rinuncia alla libertà per raggiungere la sicurezza non merita né la libertà né la sicurezza" Benjamin Franklin
"Guardati dalla furia di un uomo tranquillo" John Dryden
Guille è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 13:44   #14
ally
Bannato
 
L'Avatar di ally
 
Iscritto dal: Jan 2003
Città:
Messaggi: 4423
...scusate...evidentemente non ho capito come fungono tali event...

...ho creato le classi per i diversi Event...

Codice:
public class MyEventoA extends EventObject {
	
    int a;
    
    public MyEventoA(Object source, int a) { 
    	super(source); 
	this.a = a;
	
	System.out.println("class "+a);
	
    }
}
...l'interfaccia che li implementa...

Codice:
public interface MyMultyEventListener extends EventListener {
	
	public void performedEvantoA(MyEventoA e);
	public void performedEvantoB(MyEventoB e);
	      
}
...la classe che li lancia...

Codice:
public class Fire {
	
	private ArrayList listeners = new ArrayList();
	
	private  void fireA() {
		MyEventoA event = new MyEventoA(this, 1);
		
		for(int i = 0; i < listeners.size(); i++) {
			((MyMultyEventListener)listeners.get(i)).performedEvantoA(event);
		}
	}
	
	private  void fireB() {
		MyEventoB event = new MyEventoB(this, "");
		
		for(int i = 0; i < listeners.size(); i++) {
			((MyMultyEventListener)listeners.get(i)).performedEvantoB(event);
		}
	}
	
	public static void main(String args[]){
		
		Fire evento = new Fire();
		try{
			Thread.sleep(1000);
		}catch(Exception e){}
		evento.fireA();
		try{
			Thread.sleep(1000);
		}catch(Exception e){}
		evento.fireB();
		
	}
}
...infine ho abbozzato quella che dovrebbe essere la classe implementa l'interfaccia...ma non riesco a capire come possa funzionare...infatti l'evento lanciato va a richiamare la classe che specifica il metodo...non le classi che implementano l'interfaccia...

Codice:
public class Ricevitore implements MyMultyEventListener {


	public void performedEvantoB(MyEventoB e) {
		System.out.println("B");
		
	}

	public void performedEvantoA(MyEventoA e) {
		System.out.println("A");
		
	}
}
...chiedo lumi...
ally è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 13:55   #15
Guille
Member
 
L'Avatar di Guille
 
Iscritto dal: Dec 2004
Città: Una palla di fango abitata da scimmie sognatrici
Messaggi: 128
Prova a modifica la classe Fire cosi:
Codice:
public class Fire {
	
	private ArrayList listeners = new ArrayList();

	// registra le classi che implementano MyMultyEventListener
	public void addMyEventListener(MyMultyEventListener listener) {
		listeners.add(listener);
	}

	private  void fireA() {
		MyEventoA event = new MyEventoA(this, 1);
		
		for(int i = 0; i < listeners.size(); i++) {
			((MyMultyEventListener)listeners.get(i)).performedEvantoA(event);
		}
	}
	
	private  void fireB() {
		MyEventoB event = new MyEventoB(this, "");
		
		for(int i = 0; i < listeners.size(); i++) {
			((MyMultyEventListener)listeners.get(i)).performedEvantoB(event);
		}
	}
	
	public static void main(String args[]){

		Fire evento = new Fire();
		Ricevitore ricevitore = new Ricevitore();
		// ricevitore si registra su evento
		evento.addMyEventListener(ricevitore);

		try{
			Thread.sleep(1000);
		}catch(Exception e){}
		evento.fireA();
		try{
			Thread.sleep(1000);
		}catch(Exception e){}
		evento.fireB();
		
	}
}
__________________
"Contro la stupidità gli stessi dei lottano invano" Friedrich Schiller
"Chi rinuncia alla libertà per raggiungere la sicurezza non merita né la libertà né la sicurezza" Benjamin Franklin
"Guardati dalla furia di un uomo tranquillo" John Dryden
Guille è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2007, 14:02   #16
ally
Bannato
 
L'Avatar di ally
 
Iscritto dal: Jan 2003
Città:
Messaggi: 4423
...ok...ottimo grazie...ora vedo di riportare tutto al mio caso...

...grazie ciao...
ally è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Si è conclusa la missione lunare ...
EK Waterblock si arrende agli aumenti, i...
Geekbench si aggiorna: tutti i test con ...
Per la prima volta un computer quantisti...
Telecamere Reolink 4K su Amazon: Wi-Fi 6...
Anthropic vuole farsi i chip da sola? Co...
Il fondatore di Framework: il personal c...
JBL Live Flex 3 a 129€ su Amazon: ANC ad...
Come un uomo ha costruito un'azienda da ...
Multe fino a 400 euro anche se hai pagat...
Tapo lancia una valanga di offerte su Am...
Little Snitch su Linux: finalmente dispo...
John Deere accetta un accordo da 99 mili...
Gli astronauti di Artemis II osservano i...
OpenAI lancia ChatGPT Pro da 100 dollari...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:30.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v