Newsgroup: it.comp.java
Titolo: Come fare eseguire le applet?

Ciao a tutti, spero che la mia domanda non sia troppo banale.Ho
installato   j2sdk 1.4.1_02, settato le variabili d'ambiente, provato le
demo e funziona tutto. Ad un certo punto perň, non mi esegue piů le
applet che ho creato io, in quanto al loro posto compare "applet non
inizializzato" con l'errore che vi posto sotto.Cercando su internet, se
non ho capito male, il problema č legato all'impostazione del policytool
ed alla firma delle applet, ma mi sono arenata dopo aver generato il
file .keystore per l'utenza di root.Qualcuno mi puň illuminare? Grazie
java.security.AccessControlException: access denied
(java.lang.RuntimePermission exitVM)
        at
java.security.AccessControlContext.checkPermission(AccessControlContext.java:270)
        at
java.security.AccessController.checkPermission(AccessController.java:401)
        at
java.lang.SecurityManager.checkPermission(SecurityManager.java:542)
        at java.lang.SecurityManager.checkExit(SecurityManager.java:762)
        at javax.swing.JFrame.setDefaultCloseOperation(JFrame.java:356)
        at Progress.<init>(Progress.java:16)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)        at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
Mentre ci sono vi passo anche il codice dell'applet:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; 
public class Progress extends JFrame {
    JProgressBar current;
    JTextArea out;
    JButton find;
    Thread runner;
    int num = 0;
    public Progress() {
        super("Progress");
 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel pane = new JPanel();
        pane.setLayout(new FlowLayout());
        current = new JProgressBar(0, 2000);
        current.setValue(0);
        current.setStringPainted(true);
        pane.add(current);
        setContentPane(pane);
    }
    public void iterate() {
        while (num < 2000) {
            current.setValue(num);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) { }
            num += 95;
        }
    }
    public static void main(String[] arguments) {
        Progress frame = new Progress();
        frame.pack();
        frame.setVisible(true);
        frame.iterate();
    }
}
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:f89083108567b073aa7...@mygate.mailgate.org...


Che versione usi? Come posso farla funzionare senza modificare il 
codice? Mi dà lo stesso problema sia con l'appletviewer che aprendo la
pagina html.Se invece cerco di lanciarla col comando "java" mi dice che
manca il metodo main.Il manuale che sto usando prende come riferimento
la versione 1.3, io sto usando una 1.4.1_02.A questo punto ho le idee 
molto confuse.


 
innanzitutto devi estendere dalla classe JApplet, poi devi implementare 
almeno un metodo di questa, per esempio init(), nel quale dovrai fare le 
operazioni del tuo programma. Sarebbe meglio implementare almeno anche 
il metodo start() e paint() ed usarli correttamente per evitari 
malfunzionamenti nei browser. Tu invece hai scritto un'applicazione, 
contraddistina dalla presenza del metodo main() e per di più non hai 
ereditato da JApplet.
-- 
Se libertà in fondo significa qualcosa, significa il diritto di dire 
alla gente quello che non vuole sentire.
(George Orwell)

Il codice è stato copiato da un manuale, e tutti quelli di esempio che
seguono sono simili.Nel manuale si dà per scontato che si possa eseguire
agevolmente l'applicazione così com'è, quindi a questo punto mi viene il
dubbio che non ci sia un problema di versione del sw.


 
Guarda, il codice che hai postato non è un'applet. Se il tuo manuale 
dice che lo è... cambia manuale! :)


Infatti nell'ultima risposta ho precisato che si tratta di una
 applicazione e che vorrei eseguirla, ma non ci riesco.Ho anche visto
che hai postato un problema simile al mio e che usi una versione quasi
identica alla mia.Come lancio quest'applicazione? 
Grazie


 Grazie
Se vuoi lanciare un'applicazione, apri una "shell" (sotto windows è un 
termine un po' inesatto, comunque: Start->esegui->cmd) e posizionati 
sotto la directory dove hai compilato il tuo programma. Da lì digita 
"java NomeClasse" e la tua *applicazione* girerà, o, se sei sfortunata, 
ti verranno segnalati degli errori a runtime. Il malinteso è nato dal 
fatto che tu hai detto di voler far girare un'applet, che non è 
un'applicaizione, e necessita dell'ambiente del browser o 
dell'appletviewer per girare. Comunque se ti interessa è possibile 
scrivere un programma che gira sia come applicazione che come applet... 
ma forse non è quello che intendevi chiedere.
Il mio problema era abbastanza stupido e di tutt'altro genere...
Ciao!!! :)


A me interesserebbe sfruttare il codice che propone il manuale, 
oppure a questo punto provare come dici tu a scrivere un sorgente
compatibile.
In pratica secondo il manuale le applicazioni possono essere lanciate o
col comando java, come dici tu, oppure con il browser, purchč ci sia il
relativo
file html con lo stesso nome.Nel primo caso mi ha dato un errore del 
tipo "method main omitted", nel secondo l'errore che ho postato sopra.
Mi sembra strano che forniscano del codice incompleto,si tratta di un 
manuale della Apogeo della serie Guida completa, ed č fatto benino.Sono
andata avanti senza problemi fino al giorno 6, con la prima applet.Poi,
l'inferno.Le applicazioni sono tutte cosě mentre prima funzionavano 
regolarmente.Ho provato sia con W2000 e j2se1.3.0 che con
Red Hat 9a e j2se1.4.1_02.Stesso risultato.
Eventualmente se hai tempo mi fai vedere le correzioni che servirebbero
all'applicazione che ho postato sopra? Capisci che non č logico che del
codice spacciato per funzionante debba essere riscritto per girare.Come
si possono fare gli esercizi se gli esempi non sono corretti? C'č anche
un link al sito dell'autore, con i sorgenti originali etc, stessa cosa.
Rigrazie


 Rigrazie
Eh, sì, non c'è dubbio, è strano, ma probabilmente è una piccolezza, e 
come tale ti sfugge. Purtroppo di tempo non ne ho molto, vedrò se ci 
riesco domani, ma non ti assicuro nulla...


Fermi tutti, credo di avere trovato il problema: ho impostato
il file delle policy ed ora l'appletviewer funziona, o almeno
non mi dà più l'errore di access denied.Alcune applicazioni me
le avvia correttamente, altre me le apre 2 volte.Per esempio
qui mi apre 2 finestre senza applet e mi dà quest'errore.
Che ne dici? Il problema è nelle permission, probabilmente devo ancora
aggiustare il tiro col policytool, a meno che non mi sfugga qualcosa.
Ho settato tutti i codebase a "all permission", compreso quello col
percorso delle mie applicazioni.In quello della java/jre/lib/etc..
ci sono anche altri permessi sulle proprietà disponibili in sola lettura
che per ora non ho toccato, ho solo aggiunto all permission anche lì.
Ti posto l'errore ed il codice dell'applicazione.
java.lang.ClassCastException
        at sun.applet.AppletPanel.createApplet(AppletPanel.java:567)
        at sun.applet.AppletPanel.runLoader(AppletPanel.java:496)
        at sun.applet.AppletPanel.run(AppletPanel.java:293)
        at java.lang.Thread.run(Thread.java:536)
java.lang.ClassCastException
        at sun.applet.AppletPanel.createApplet(AppletPanel.java:567)
        at sun.applet.AppletPanel.runLoader(AppletPanel.java:496)
        at sun.applet.AppletPanel.run(AppletPanel.java:293)
        at java.lang.Thread.run(Thread.java:536)
Questo è il codice dell'applicazione:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; 
public class ToolBar extends JFrame {
    public ToolBar() {
        super("ToolBar");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ImageIcon image1 = new ImageIcon("button1.gif");
        JButton button1 = new JButton(image1);
        ImageIcon image2 = new ImageIcon("button2.gif");
        JButton button2 = new JButton(image2);
        ImageIcon image3 = new ImageIcon("button3.gif");
        JButton button3 = new JButton(image3);
        JToolBar bar = new JToolBar();
        bar.add(button1);
        bar.add(button2);
        bar.add(button3);
        JTextArea edit = new JTextArea(8,40);
        JScrollPane scroll = new JScrollPane(edit);
        JPanel pane = new JPanel();
        BorderLayout bord = new BorderLayout();
        pane.setLayout(bord);
        pane.add("North", bar);
        pane.add("Center", scroll);
        setContentPane(pane);
    }
    public static void main(String[] arguments) {
        ToolBar frame = new ToolBar();
        frame.pack();
        frame.setVisible(true);
    }
}
Grazie ancora.


 Ti posto l'errore ed il codice dell'applicazione.
Allora, vediamo se la cosa è più chiara: gli errori che hai postato 
derivano dal fatto che STAI LANCIANDO COME UN'APPLET UN PROGRAMMA CHE 
NON è UN APPLET! Scusa se urlo, ma pensavo che a questo punto la cosa 
fosse chiara :)
Se lanci il tuo codice all'interno dell'appletviewer o all'interno di un 
browser, hai errori, e sfido che ce li hai! L'unico modo di lanciare il 
programma che hai postato (io l'ho fatto ed è andato tutto bene) è 
scrivere da shell "java ToolBar" dalla directory dove si trova 
ToolBar.class
Ripeto: le applet hanno questo tipo di stuttura:
import javax.swing.JApplet;
public class UnApplet extends JApplet {
// Nota come eredita da JApplet!!!
 
	/* Campi, ogetti e variabili d'istanza della classe.
	 * Metodi tuoi e/o ereditati da JApplet e sovrascritti.
	 */
	public void init() {
		// metodo sovrascritto: inizializzazione
	}
 
	public void start() {
		// metodo sovrascritto: partenza
	}
	public void paint( Graphics g ) {
		/* metodo sovrascritto: eventuali operazioni grafiche con 
		 * oggetti Graphics
		 */
	}
	// Altri metodi tuoi e/o ereditati da JApplet e sovrascritti
}
Questa, e solo questa è un'applet! Se il tuo manuale dice di no, è 
veramente ora che lo cambi! :)
In più *devi* creare un file HTML come questo per ogni applet come
quella di sopra:
<HTML><HEAD></HEAD><BODY>
<APPLET CODE="ToolBar.class" CODEBASE="." WIDTH=400 HEIGHT=300></APPLET>
</BODY></HTML>
Naturalmente l'HTML può essere arricchito come ti pare.
Spero di essere stato abbastanza chiaro: se ogi mi avanza un po' di 
tempo (ma credo sia difficile) vedrò di modificare uno dei due codici 
che hai postato per farli diventare un'applet.
Ciao!!!


 un link al sito dell'autore, con i sorgenti originali etc, stessa cosa.
Gentilmente mi potresti togliere la curiosità di come si chiama questo
manuale? Tipo Autore, Titolo, Editore? :-)
Saluti
R.I.

Il manuale è la Guida Completa di Java2 di Lemay e Cadenhead.
Ho provato a riscrivere il codice ToolBar come applet e lanciandolo con
appletviewer funziona.La mia confusione nasce dal fatto che il codice
originale, lanciato col comando "java", a me dà questo errore:
Exception in thread "main" java.lang.NoClassDefFoundError: ToolBar
Errori di compilazione non me ne ha dati.
Quindi se a te non lo dà, vorrei capire perchè, visto che ho usato gli
stessi comandi che hai usato tu.La differenza tra applet ed applicazione
l'ho capita, il codice è diverso come il metodi di avvio.Tutti i comandi
vengono dati all'interno della directory dei sorgenti e classi, 
naturalmente. 
Ciao


 Exception in thread "main" java.lang.NoClassDefFoundError: ToolBar
Così, ad occhio e croce, potrebbe essere il CLASSPATH.
Prova a settarlo così (Windows):
CLASSPATH = .;<Directrory dove è installato jre>/lib/rt.jar


 Exception in thread "main" java.lang.NoClassDefFoundError: ToolBar
Scusa... ma come è possibile? Non ti dovrebbe accadere questo... a meno che
tu non abbia fatto una delle cose riportate qui sotto:
1) Ti hanno consigliato di settare il classpath... solo che l'hai fatto male
e come conseguenza hai messo fuori uso il compilatore java e la la JVM (nel
senso che non compili e non esegui).
Si risolve togliendo la variabile CLASSPATH dal tuo ambiente.
2) Scrivi nella shell: java ToolBar.class
   Si Risolve toglendo il .class: java ToolBar (rispettando le
maiuscole/minuscole - Java è case sensitive - e il file si deve chiamare
come la classe che usi).
=======================
Poi vorrei darti dei suggerimenti generali:
Se devi fare un Applet (cioè un programma java che gira in un browser) come
per una stand-alone - con una GUI (Graphics User Interface) - (un programma
che ha un main cioe'un punto d'entrata per la JVM) ci sono due vie:
Usare AWT o SWING.
Per le Applet:
(con AWT)
si eredita da Applet (public class <nomeApplet> extends Applet)
(con SWING)
si eredita da JApplet (public class <nomeApplet> extends JApplet)
Per le Stand-Alone:
(con AWT)
si eredita da Frame (public class <nomeFrame> extends Frame)
(con SWING)
si eredita da JFrame (public class <nomeFrame> extends JFrame)
[Nota la 'J' tutti i componenti SWING incominciano con questo prefisso]
Per visualizzare un Applet ti serve un browser o l'appletviewer... ma devi
scrivere un file HTML che oltre ai soliti tag abbia anche il tag
<Applet></Applet>
Un Applet per funzionare ha bisogno dei miles-stone:
void init(), void start(), void stop(), void paint() << non c'è bisogno di
implementarli tutti. Ma init() e start() di sicuro.
Per le Stand-Alone basta il classico main() e viene lanciato dalla riga di
comando della shell con java <nomeprogramma>
=======================
Sperando di esserti stato di aiuto ti:
Saluto
R.I.
--
OP (@) di #java_it (nick: StarBlaze) su AzzurraNet
Server: 
libero.azzurra.org
 / porte: 6667-6669

No, ho appena provato ed il risultato non cambia.Ho anche provato a
lasciare
solo /lib senza specificare il file, stesso risultato.
Ecco la variabile:
export
CLASSPATH=/usr/local/java/lib:/usr/local/tomcat/common/lib/servlet.jar:
/usr/local/java/jre/lib/rt.jar
Grazie per l'aiuto.


Argh, stavamo scrivendo nello stesso momento.La variabile l'ho settata
come consigliato dal manuale, ovvero /usr/local/java/lib.La seconda
riguarda un altro lavoro che stavo guardando e la terza è come
consigliatomi
da Gep. Il comando java l'ho sempre dato omettendo l'estensione .class,
quindi rimane l'incognita delle variabili d'ambiente.
Ho salvato il tuo post, cosi almeno ho delle impostazioni generiche.A
questo punto che faccio, annullo del tutto il CLASSPATH?
Grazie a tutti per l'aiuto


 Ho salvato il tuo post, cosi almeno ho delle impostazioni generiche.
Grazie... come al solito, se vuoi, sono disponibile nel chan della firma.
Saluti
R.I.
P.s.: piccolo commento personale... preferivo - Artemide - Valeria... :-)


 viceversa) e per le stand-alone avere un main().
Fino a qui infatti era chiaro. Diversamente usavo il comando
"appletviewer
miaapplet.html".
Cmq la cosa curiosa č che per far funzionare le applicazioni ho dovuto
settare il CLASSPATH con /usr/local/percorsomieapplicazioni.Diversamente
non funzionava nč cancellandolo, nč mettendoci il percorso piů logico
che ci si aspettava.Ho riavviato, riprovato e confermo, la vuole proprio
cosě.Ma non so perchč.La soluzione l'ho trovata su internet.Adesso
comunque funziona tutto.
Grazie 


 La soluzione l'ho trovata su internet.
Davvero? E qual'č? :-)
Saluti
R.I.


 Davvero? E qual'č? :-)
Mi sa che non si possono mettere link, ma ho fatto una ricerca con
google.
Grazie di tutto, ciao
