Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di EngLab
    Registrato dal
    Jan 2006
    Messaggi
    496

    [JAVA] - E' possibile lanciare JApplet da una JApplet?

    Ciao, sto sbattendo la testa su una questione da un paio di giorni ormai: ho bisogno di buona portabilità per un'applicazione che sto sviluppando. Dovendo girare su browser, ho optato per una JApplet (poichè ho bisogno di componenti Swing). Però questa JApplet dovrebbe poter girare anche come un'applicazione, quindi dovrebbe poter aprire altre finestre di opzioni (quindi altre JApplet).
    Una cosa del genere è fattibile? Ho provato a definire una JApplet, ma non riesco a farle creare e lanciare un'altra JApplet.

    Al click di un pulsante, ho inserito questo codice:

    Codice PHP:
    JApplet miaApplet = new MyApplet();
    miaApplet.start();
    miaApplet.init();
    miaApplet.setVisible(true); 
    Il problema è che la JApplet viene avviata (stampa un messaggio nello standard output come controllo), ma non si apre nessun visualizzatore di output.

    Tengo a precisare che, avviando direttamente la applet (uso Eclipse) tutto viene visualizzato e funziona come dovrebbe (è parte di un software client-server).

    Ringrazio in anticipo!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] - E' possibile lanciare JApplet da una JApplet?

    Originariamente inviato da EngLab
    Però questa JApplet dovrebbe poter girare anche come un'applicazione, quindi dovrebbe poter aprire altre finestre di opzioni (quindi altre JApplet).

    Codice PHP:
    JApplet miaApplet = new MyApplet();
    miaApplet.start();
    miaApplet.init();
    miaApplet.setVisible(true); 
    Il problema è che la JApplet viene avviata (stampa un messaggio nello standard output come controllo), ma non si apre nessun visualizzatore di output.
    Prima questione: una applet ha un "ciclo di vita" particolare rispetto ad una normale applicazione standalone. Quindi dovresti "mimare" esattamente la sequenza delle invocazioni dei metodi del life-cycle proprio come farebbe un "vero" container delle applet.

    Seconda questione: il "contesto". Ad una applet viene associato un AppletContext, che un "vero" container passa alla applet tramite il metodo setStub(AppletStub stub) di Applet (AppletStub contiene anche altre cose). Tutto questo dovresti implementarlo tu, se la tua è una applicazione standalone. Ma non sarebbe banale, basta vedere cosa offre AppletContext.

    Terza questione: una applet alla fin fine è un "pannello" (deriva da java.awt.Panel), solo istanziarlo e far setVisible(true) non vorrebbe dire tutto ... dovresti metterlo dentro "qualcosa".

    Morale della favola: non farlo!

    Vuoi che la tua applicazione possa funzionare sia come "applet" che come applicazione standalone? Bene, allora innanzitutto devi valutare bene le differenze tra i due tipi di applicazioni e verificare cosa ha bisogno la tua applicazione.

    Ha bisogno ad esempio di ricevere dei "parametri"? Si gestiscono in un certo modo in una applicazione standalone e si gestiscono in tutt'altro modo in una applet.

    Dopodiché la soluzione migliore è quella di "incapsulare" tutto quanto il più possibile all'interno ad esempio di un JPanel, e quindi a quel punto una classe che estende JApplet e un'altra che estende JFrame si limiteranno semplicemente a fare da "contenitore" di tutta la tua interfaccia utente.
    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 L'avatar di EngLab
    Registrato dal
    Jan 2006
    Messaggi
    496
    Ho capito, insomma non mi conviene molto. Quello che mi stai consigliando è, praticamente, di mettere gli elementi di ogni candidato JApplet/JFrame in un JPanel, e settare ogni JPanel come invisibile all'inizio. Poi, di volta in volta, faccio diventare visibile il Panel che mi interessa, giusto?
    Sarebbe fattibile, ma ho bisogno di un'altra informazione: è possibile creare un unico JApplet che, a seconda del contesto in cui venga lanciato, appaia come JApplet o JFrame?
    Ho fatto così: nel JApplet ho anche creato un metodo main:

    Codice PHP:
    public static void main(String[] args) {
        
    JFrame f = new JFrame("Applet Application GUI");
        
    JApplet aag = new MyApplet();
        
    f.getContentPane().add(aag);
        
    f.pack();
        
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        
    f.setVisible(true);

    In questa maniera, se lanciassi la classe come applicazione JAVA, dovrebbe crearmi un JFrame e mettermi all'interno la JApplet. In teoria dovrebbe funzionare, ma ho rilevato un problema: non funziona il File.list() se inserisco la JApplet nel JFrame. Invece fila tutto liscio se avvio la classe come JApplet.

    EDIT: non so che problema mi dà, probabilmente di permessi? Non mi popola l'array di stringhe file.list(), quindi ritorna un valore null. Secondo la javadoc:

    codice:
    Returns null if this abstract pathname does not denote a directory, or if an I/O error occurs.
    
    http://download.oracle.com/docs/cd/E...html#listFiles(java.io.FilenameFilter)
    Ma ciò non è vero, poichè come JApplet funziona perfettamente!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da EngLab
    Ho capito, insomma non mi conviene molto. Quello che mi stai consigliando è, praticamente, di mettere gli elementi di ogni candidato JApplet/JFrame in un JPanel, e settare ogni JPanel come invisibile all'inizio.
    No alt. La questione è quella di sviluppare un programma che possa funzionare sia come "applet" che come "applicazione standalone"?

    Se è così (almeno io ho capito questo), la soluzione è quella di fare un tuo pannello es. PannelloPrincipale (che estende JPanel). Poi se parte come applet, allora una tua classe es. MiaApplet (che estende JApplet) si limiterà a fare da contenitore per una istanza di PannelloPrincipale e in modo simile se parte come applicazione standalone allora una tua classe es. MioFrame (che estende JFrame) si limiterà a fare da contenitore per una istanza di PannelloPrincipale.
    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 L'avatar di EngLab
    Registrato dal
    Jan 2006
    Messaggi
    496
    Esattamente, voglio sviluppare un'applicativo che possa partire (senza avere doppioni) sia come JApplet che come JFrame. Il problema è che vorrei avere varie schermate (tipo wizard), quindi dovrei fare più pannelli (JPanel) ognuno per ogni "finestra" e settare a visible quello che voglio venga visualizzato ad un certo step.

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.