Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2015
    Messaggi
    4

    [JAVA] Chaiarimenti circa le istanze di una classe

    Salve a tutti,

    mi sorge un dubbio: io sto cercando di implementare un popup menu che in base al valore di una variabile aggiunga o tolga degli elementi dal menu stesso.

    Quello che faccio è richiamare la classe che estende il popup menu dentro il mouse listener in questo modo:

    codice:
     public void mouseReleased(MouseEvent e)
            {
                global g = new global();
                
                if ( e.isPopupTrigger() ) 
                {
                    System.out.println("enter in released open");
                   
                    ___poupupmenu___ p = new ___poupupmenu___(g.return_value_elenco());
                    
                    lista.setSelectedIndex(lista.locationToIndex(e.getPoint()));
                    p.show(e.getComponent(), e.getX(), e.getY());      
          
                }
    Solo che la classe popup menu la prima volta crea il giusto menu ma cambiando il valore della variabile il menu non varia.

    Per questo volevo chiedere chiarimenti circa i costruttori (e di rimando anche dei distruttori) in quanto non perchè ogni volta che viene richiamato quell'evento non crea una nuova istanza che tenga conto del nuovo valore.

    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Betta91 Visualizza il messaggio
    codice:
     public void mouseReleased(MouseEvent e)
            {
                global g = new global();
                
                if ( e.isPopupTrigger() ) 
                {
                    System.out.println("enter in released open");
                   
                    ___poupupmenu___ p = new ___poupupmenu___(g.return_value_elenco());
                    
                    lista.setSelectedIndex(lista.locationToIndex(e.getPoint()));
                    p.show(e.getComponent(), e.getX(), e.getY());      
          
                }
    Solo che la classe popup menu la prima volta crea il giusto menu ma cambiando il valore della variabile il menu non varia.
    Io però vedo che il valore che passi al popupmenu è da un oggetto referenziato da 'g'. E questo oggetto lo crei nuovo nel mouseReleased ( new global() ).
    Quindi per forza vedi sempre la stessa cosa ... quell'oggetto global creato nuovo avrà delle sue proprietà con valore predefinito.
    E presumo che in giro nell'applicazione hai un altro oggetto global .... quello devi usare!

    Pertanto il problema non è il popupmenu.


    P.S. spero che il tuo codice reale non abbia davvero tutti quei underscore!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2015
    Messaggi
    4
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Io però vedo che il valore che passi al popupmenu è da un oggetto referenziato da 'g'. E questo oggetto lo crei nuovo nel mouseReleased ( new global() ).
    Si è vero ho altri oggetti g in giro per l'applicazione (onestamente non saprei come riprendere un oggetto istaziato in una classe all'interno di un'altra), però il valore che mi ridà g è contenuto in una variabile di tipo static quindi non dovrei avere questo problema in teoria.

    Per questo credo che il mio problema è il costruttore del popup menu e vorrei avere delucidazioni su come operano

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Betta91 Visualizza il messaggio
    onestamente non saprei come riprendere un oggetto istaziato in una classe all'interno di un'altra
    Questi sono più che altro i "soliti" aspetti di design delle classi. Che coinvolgono ovviamente i principi basilari della OOP più i design pattern. Quanto ne sai?

    Quote Originariamente inviata da Betta91 Visualizza il messaggio
    però il valore che mi ridà g è contenuto in una variabile di tipo static quindi non dovrei avere questo problema in teoria.
    Male ... cioè è male lo static!
    Il fatto che sia static comunque potrebbe anche dare, in teoria, il valore corretto. Ma non potendo vedere tutto il tuo codice, non posso certo dire se è così, se non è così per via di altre cose inappropriate/errate e come sistemare.

    Quote Originariamente inviata da Betta91 Visualizza il messaggio
    Per questo credo che il mio problema è il costruttore del popup menu e vorrei avere delucidazioni su come operano
    Ma non c'è niente di particolare da sapere .... in generale se passi dei parametri ad un costruttore, esso ha la possibilità di configurare il suo "stato" in base a tali parametri. Nel tuo caso, presumo, vai a creare o no certi menu/menu item. Non è quello il punto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2015
    Messaggi
    4
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Questi sono più che altro i "soliti" aspetti di design delle classi. Che coinvolgono ovviamente i principi basilari della OOP più i design pattern. Quanto ne sai?
    Allora sulla OOP conosco i principi base però non so niente sui design pattern.

    Quote Originariamente inviata da andbin Visualizza il messaggio
    Male ... cioè è male lo static!
    Il fatto che sia static comunque potrebbe anche dare, in teoria, il valore corretto. Ma non potendo vedere tutto il tuo codice, non posso certo dire se è così, se non è così per via di altre cose inappropriate/errate e come sistemare.
    Garantisco che il valore è coretto perchè il cambiamento del valore di quella variabile comporta anche il cambiamento dei contenuti da visualizzare nel frame ed i contenuti cambiano tranquillamente


    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ma non c'è niente di particolare da sapere .... in generale se passi dei parametri ad un costruttore, esso ha la possibilità di configurare il suo "stato" in base a tali parametri. Nel tuo caso, presumo, vai a creare o no certi menu/menu item. Non è quello il punto.
    No perchè appunto per il fatto che il valore è corretto non capisco perchè non cambia, perchè ogni volta che si verifica l'evento dovrebbe creare una nuova istanza prendendo il valore in input. E poi non so se sarebbe corretto distruggere di volta in volta queste istanze. Se si non saprei come fare (nel senso che so come si crea un distruttore ma non saprei quando usarlo e dove metterlo)

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Betta91 Visualizza il messaggio
    non capisco perchè non cambia, perchè ogni volta che si verifica l'evento dovrebbe creare una nuova istanza prendendo il valore in input.
    Ma in generale, sai eseguire in "debugging" il tuo codice? Hai verificato se ad una seconda volta che apri il popup tramite azione del mouse (aspettandoti qualcosa di diverso), il costruttore del poupupmenu riceve il nuovo valore corretto e compie le azioni corrette .. o no?

    Quote Originariamente inviata da Betta91 Visualizza il messaggio
    nel senso che so come si crea un distruttore ma non saprei quando usarlo e dove metterlo
    In Java non esistono i "distruttori", perlomeno non nel senso come in altri linguaggi. Un oggetto resta in vita finché è "raggiungibile" (che non vuol dire solo "referenziato"!). Se riesci a fare in modo che un oggetto non risulti più raggiungibile in alcun modo, allora verrà preso in considerazione dal gc (garbage collector).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2015
    Messaggi
    4
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ma in generale, sai eseguire in "debugging" il tuo codice? Hai verificato se ad una seconda volta che apri il popup tramite azione del mouse (aspettandoti qualcosa di diverso), il costruttore del poupupmenu riceve il nuovo valore corretto e compie le azioni corrette .. o no?
    Si l'ho fatto e non riceve il nuovo valore per questo non capisco.

    Quote Originariamente inviata da andbin Visualizza il messaggio
    in Java non esistono i "distruttori", perlomeno non nel senso come in altri linguaggi. Un oggetto resta in vita finché è "raggiungibile" (che non vuol dire solo "referenziato"!). Se riesci a fare in modo che un oggetto non risulti più raggiungibile in alcun modo, allora verrà preso in considerazione dal gc (garbage collector).
    Scusami ti sembrerò deficiente ma vorrei capire bene questa cosa dei distruttore in che senso raggiungibile?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Betta91 Visualizza il messaggio
    Si l'ho fatto e non riceve il nuovo valore per questo non capisco.
    Purtroppo, senza vedere il tuo codice (quanto hai postato non è sufficiente né utile) non potrei nemmeno tirare ad indovinare.

    Quote Originariamente inviata da Betta91 Visualizza il messaggio
    vorrei capire bene questa cosa dei distruttore in che senso raggiungibile?
    Un oggetto è "raggiungibile" se è possibile tracciare un cammino (anche indiretto, attraverso altri oggetti) verso l'oggetto partendo da un certo ben preciso insieme di "radici". Questo insieme di radici è composto principalmente da tutti i campi reference "di classe" (static) presenti nelle classi caricate e da tutti i reference presenti negli stack frame degli stack dei "live" thread (ogni thread ha un suo proprio stack). C'è sicuramente anche dell'altro (ad esempio legato a JNI) ma dovresti vedere libri/siti specifici, perché qui andiamo su argomenti davvero "fini" e che non ricordo perfettamente.

    Se il garbage collector può tracciare questo cammino, allora l'oggetto è raggiungibile e non può assolutamente essere toccato né collezionato dal g.c. ... nemmeno per sogno.
    Il principio di raggiungibilità non è da confondere con il fatto che un oggetto è semplicemente e banalmente "referenziato". Due oggetti posso referenziarsi a vicenda tra di loro e non essere raggiungibili. In questo caso il g.c. (tutte le implementazioni moderne, ormai da tanti anni) è perfettamente in grado di collezionarli e liberare la memoria per entrambi.

    Riguardo i "distruttori", ripeto che in Java non c'è espressamente questo concetto. In C++ un distruttore è una funzione membro della classe che viene invocato automaticamente quando l'oggetto viene rilasciato (esplicitamente tramite delete su un puntatore o perché la variabile che tiene l'oggetto termina la sua esistenza, ad esempio).
    In Java non c'è proprio un equivalente. Esiste un finalize() (originariamente in java.lang.Object) ma qualunque libro valido e serio su Java ti dirà che è più critico da gestire, su cui non fare affidamento più di tanto e quindi generalmente da ignorare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.