Newsgroup: it.comp.java
Titolo: Ma cosa significa la sequenza di parentesi }) ?

Salve 
forse č banale la domanda ...ma non capisco.
In molti esempi trovo le seguenti parentesi di chiusura
}) 
cioč una graffa e poi una tonda.
Cosa significa tale sequenza? 
Vi riporto l'esempio che ho trovato sul tutorial Sun 
import javax.swing.*;          //This is the final package name.
//import com.sun.java.swing.*; //Used by JDK 1.2 Beta 4 and all
                               //Swing releases before Swing 1.1 Beta
3.
import java.awt.*;
import java.awt.event.*;
public class SwingApplication {
    private static String labelPrefix = "Number of button clicks: ";
    private int numClicks = 0;
    public Component createComponents() {
        final JLabel label = new JLabel(labelPrefix + "0    ");
        JButton button = new JButton("I'm a Swing button!");
        button.setMnemonic(KeyEvent.VK_I);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                numClicks++;
                label.setText(labelPrefix + numClicks);
            }
        });   // eccole qua!!!!!
        label.setLabelFor(button);
        /*
         * An easy way to put space between a top-level container
         * and its contents is to put the contents in a JPanel
         * that has an "empty" border.
         */
        JPanel pane = new JPanel();
        pane.setBorder(BorderFactory.createEmptyBorder(
                                        30, //top
                                        30, //left
                                        10, //bottom
                                        30) //right
                                        );
        pane.setLayout(new GridLayout(0, 1));
        pane.add(button);
        pane.add(label);
        return pane;
    }
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(
                UIManager.getCrossPlatformLookAndFeelClassName());
        } catch (Exception e) { }
        //Create the top-level container and add contents to it.
        JFrame frame = new JFrame("SwingApplication");
        SwingApplication app = new SwingApplication();
        Component contents = app.createComponents();
        frame.getContentPane().add(contents, BorderLayout.CENTER);
        //Finish setting up the frame, and show it.
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        frame.pack();
        frame.setVisible(true);
    }
}
Io suppongo che ci siano di mezzo i costruttori .....nel main vedo la
chiamata al costruttore della classe SwingApplication
ma non trovo la definizione di tale costruttore. 
Sbaglio a dire ciň? 
ciaooo :))) 

Stampati il codice su carta e prendi un evidenziatore.
Per ogni parentesi aperta cercane una chiusa, e vedrai che sono sempre in
numero pari.
infatti per ogni }) c'è da qualche parte una parentesi graffa aperta ed una
tonda aperta:
esempio
ciao (amico { sai che sei { simpatico ??
}})
Ovviamente a meno che non siano sorrisini come questi :-))))
Ciao

 
Si, ma questo e' ovvio. Se ci pensi bene pero' le graffe chiudono le 
classi ed i metodi, mentre le tonde chiudono la lista di parametri di un 
metodo. Visto che la lista di parametri di un metodo e' "interna" ad un 
metodo, che a sua volta e' "interno" ad una classe, ci deve essere una 
qualche spiegazione diversa che probabilmente e' quella che Briz vuole 
sapere. Che ne dici?
ciao
uL

Dico che forse invece intende discernere il concetto di graffa e di tonda...
perchè mai una graffa c'ha la spirulecchia in mezzo e la tonda è tonda ?
No beh, magari intendeva questo :-)
In effetti la questione potrebbe essere tortuosa :-)
Data la domanda generica, la prima risposta e la più ovvia,a mio parere, era
la migliore.
La sua domanda pareva molto superficiale e non intesa a discutere l'uso
delle graffe e quello delle tonde.
Nel caso così fosse, senza entrare nel merito di metodi,classi, funzioni etc
etc
molto più semplicemente, e senza tirare in ballo la terminologia assai
astrusa di J (che non fa altro che chiamare in modo diverso elementi già
esistenti) basta dire:
le graffe servono per circondare pezzi di codice
le tonde circondano le cose usate dal codice
Per esempio se voglio stampare "ciao" scrivo
{
system.print("ciao");
}
J

La domanda me l'ero posta anch'io leggendo...
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                numClicks++;
                label.setText(labelPrefix + numClicks);
            }
        });
Credo che Briz intendesse chiedere "come è possibile che
all'interno della chiamata ad un metodo si possa implementare
una classe..."
Forse ad entrambi ci è sfuggito qualcosa del "Java Language Specification"?
Ciao

 
Esatto!
uL

Forse ad entrambi ci è sfuggito qualcosa del "Java Language Specification"?
http://java.sun.com/docs/books/tutorial/java/javaOO/innerclasses.html
e pag 373 di "Thinking in Java"
HTH
-- 
Ciao
	Fabrizio C.


scusate questo non centra proprio niente con il subject.
 da un po' di tempo leggo i post di Ugo con degli strani '=20' in
fondo ad ogni riga...
che succede??? 

eccomi :)
mea culpa .... non avevo affatto visto che la sequenza di parametri è
quella giusta. 
Che ci volete fare .... errare è umano :))) 
Però....già che ci sono vi chiedo un'altra cosetta :
ho una applet con un semplice button che alla pressione fa partire un
frame con vari panel e cose del genere ( un form per immettere dati
insomma ). Uso Forte4java e quando vado ad eseguire tutto ok.
Però se tento di chiudere il frame prima dell'applet ottengo un errore
di cui vi posto lo stack 
Exception occurred during event dispatching:
java.security.AccessControlException: access denied
(java.lang.RuntimePermission exitVM)
        at
java.security.AccessControlContext.checkPermission(AccessControlContext.java:272)
        at
java.security.AccessController.checkPermission(AccessController.java:399)
        at
java.lang.SecurityManager.checkPermission(SecurityManager.java:545)
        at
java.lang.SecurityManager.checkExit(SecurityManager.java:765)
        at java.lang.Runtime.exit(Runtime.java:91)
        at java.lang.System.exit(System.java:701)
        at QueryFrame2.exitForm(QueryFrame2.java:522)
        at QueryFrame2.access$000(QueryFrame2.java:11)
        at QueryFrame2$1.windowClosing(QueryFrame2.java:95)
        at java.awt.Window.processWindowEvent(Window.java:812)
        at javax.swing.JFrame.processWindowEvent(JFrame.java:237)
        at java.awt.Window.processEvent(Window.java:788)
        at java.awt.Component.dispatchEventImpl(Component.java:2593)
        at java.awt.Container.dispatchEventImpl(Container.java:1213)
        at java.awt.Window.dispatchEventImpl(Window.java:926)
        at java.awt.Component.dispatchEvent(Component.java:2497)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:339)
        at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:131)
        at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:98)
        at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at
java.awt.EventDispatchThread.run(EventDispatchThread.java:85)
Ora nella documentazione delle API leggo questo :
public static final int EXIT_ON_CLOSE
The exit application default window close operation. If a window has
this set as the close operation and is closed in an applet, a
SecurityException may be thrown. It is recommended you only use this
in an application. 
Non so se è il mio caso questo , ma noto che  il mio frame aveva
settato come defaultCloseOperation il valore EXIT_ON_CLOSE; 
quindi provo a cambiarlo e a mettere DO_NOTHING_ON_CLOSE....cosi' per
vedere se era quel parametro che mi dava l'errore. Ma di nuovo
l'errore.
Ora mi potete spiegare perchè si presentano questi tipi di eccezioni?
anche in semplici parole....è solamente voglia di non rimanere senza
una spiegazione :)))) 
Se poi mi dite un modo per poter permettere alal finestra frame di
essere chiusa senza chiudere la pagina html dell'applet ( perchè in
essa ci sono molte altre cose oltre che l'applet e quindi fare un
reload è noioso e porta via tempo ) ve ne sarei + che grato.
ciaooooo :))))

         });
c'è un metodo addActionListener() che richiede in ingresso un
ActionListener.
Sta di fatto che ActionListener è un'interfaccia, quindi la new
ActionListener() di per sè dovrebbe generare un errore di compilazione! Ciò
significherebbe che per avere il tuo ActionListener dovresti implementare
l'interfaccia, creare un'istanza della nuova classe e passarla al metodo, il
tutto solamente per creare una risposta alla pressione di un tasto! Molto +
comodo quindi definire al volo una classe e istanziarne una istanza grazie
alla flessibilità di sintassi data dall'operatore new. Personalmente è una
delle possibilità di Java che apprezzo di più. La parentesi tonda dopo la
graffa serve quindi ovviamente a chiudere la chiamata del metodo
addActionListener, lasciata in sospeso per la creazione al volo della nuova
classe.
Per le Inner Classes ti consiglio anch'io il link di F. Camera
Spero di esserti stato utile
Ciao
DavideD

        at java.lang.System.exit(System.java:701)
Non puoi chiamare System.exit da un Applet (soliti motivi di
sicurezza).
Cambia il comportamento della tua finestra, in modo che venga nascosta
o distrutta all'uscita ma non tenti di uscire dalla VM.
HTH,
Mauri.
-- 
La forza di gravità è un falso mito,
è la Terra che succhia!

č la Terra che succhia!
quindi diciamo che un setVisible(false) poterbbe andare bene?
Ci avevo pensato ma quello che mi chiedo se il frame sebbene
invisibile stia ancora in funzione. Non vorrei che accada questo. 
ALtrimenti che uso per distruggerlo senza fermare l'applet ....
destroy() ? 
 

destroy() ? 
Penso che il metodo giusto sia dispose() ereditato da java.awt.Window
Ciao,


Mauri.
Grazie mille per l'aiuto Mauri.
L'unica cosa che mi lascia un po perplesso è questa: usando  dispose()
il frame si chiude eccome....ma nel forte4java quando vado a testare
il frame da solo, senza usare l'applet e lo chiudo , nella finestra
dei processi attivi mi compare quello del frame. 
Leggendo poi nella documentazione API ...al metodo dispose() si dice
che esso rilascia tutte le risorse che quella finestra stava usando e
liberando memoria. Quindi se non ho capito male si chiude
effettivamente visto che lascia tutto. 
Però poi leggo che il sistema tiene traccia di come stava il frame
prima della chiusura perchè con una seguente chiamata a show() riviene
visualizzato in quello stato. Quindi vuoi che Forte mi dica che è
ancora "running" a causa di questa memorizzazione?
Non so ..... alla fine potrei dire :funziona quindi chissenefrega
:))))
Ma non lo faccio : solo per capire meglio il Java 
ciaooo :)))

Ma non lo faccio : solo per capire meglio il Java 
Temo che il *canaio* nasca dal sistema operativo sottostante, ma debbo
confessare che non ci ho mai capito a fondo... fatto sta che dispose()
fa bene il suo lavoro, e non mi ha dato mai problemi, nemmeno con dei
test long term run.
Se qualcuno ha informazioni più accurate, è gradito un suo intervento.
Ciao,
Mauri.
-- 



Allora nemmeno a me li creerà :)))) ghghghghgh
spero :)
grazie mille per l'aiuto 
ciaoooo :)))