Newsgroup: it.comp.java
Titolo: Class.forName()

Come funziona la suddetta funzione?
Ci vuole il percorso completo (es. c:\....)?
Alla fine ci devo mettere il .class?
Ho provato tutte le possibile combinazioni ma mi viene sempre fuori un
ClassNotFoundException, naturalmente la classe esiste.
--
Manny Calavera
Antispam: CAVA²

Come funziona la suddetta funzione?
[CUT]
http://java.sun.com/j2se/1.4/docs/api/java/lang/Class.html#forName
(java.lang.String)
HTH
-- 
Ciao
	Fabrizio C.


Bene grazie, ci avevo guardato anch'io, ma, forse per la mia scarsa
padronanza dell'inglese, non ci ho cavato un ragno da un buco.
Il tutto presumo funzioni con classi standard, ma se io faccio una classe
mia, per es. contenuta in c:\java\ , chiamata Pippo.class, una chiamata
Class.forName("c:\java\Pippo") non sortisce effetto.
Come mai?


Class.forName("c:\java\Pippo") non sortisce effetto.
In nessun punto della documentazione citata si parla di nomi o percorsi di 
file.
Per fare in modo che la classe venga trovata (da riferire con il suo FQN 
Fully Qualified Name), deve essere nel percorso raggiungibile dal 
ClassLoader di default e cioč nel CLASSPATH.
Un'altra via č scrivere un proprio ClassLoader e usare l'altra versione di 
Class.forName, ma... ne vale la pena?
Cosa vuoi ottenere di preciso?
-- 
Ciao
	Fabrizio C.

 Cosa vuoi ottenere di preciso?
L'idea era rifare, o almeno tentare di rifare, l'appletviewer, con la
differenza di passargli la classe contenente l'applet invece che la pagina
html.
Il tutto così solo per sport o esercizio, vedi te, quindi un qualcosa di
semplice e alla buona.
Il Class.forName() mi serviva per fare una nuova instanza della applet
passata per poi farla partire e metterla in un jframe.
Ha un senso come cosa?


 Ha un senso come cosa?
E' una cosa che in futuro verrei fare anch'io... ma non ci ho mai nemmeno
provato, se ci riesci magari manda un post.
Grazie ciao.

 
[cut]
Per classpath si intende l'elenco dei percorsi (directory o file jar) in
cui vengono ricercate le classi. Tale elenco (a parte per le classi di
sistema e le extension) si imposta tramite la variabile d'ambiente
CLASSPATH o tramite l'opzione -cp del comando java.
Se non ti e' chiaro dai un'occhiata qui:
http://java.sun.com/docs/books/tutorial/getStarted/cupojava/index.html
-- 
Lucio Benfante
Brainbench MVP for Java 1
http://www.brainbench.com
MyTranscript: 
http://www.brainbench.com/transcript.jsp?pid=167064

 >
http://java.sun.com/docs/books/tutorial/getStarted/cupojava/index.html
In ogni caso, quindi, se le due classi, quella con l'applet e quella col
main, sono nella stessa cartella non basterebbe un
Class.forName("MiaApplet"); in cui MiaApplet.class è la classe con l'applet
da far partire?
Se si perchè non funge?




In che senso "non funge"? Che errori ti da'?
Tieni anche conto che il Class.forName non crea un'istanza della classe,
ma solo un'istanza della classe Class che rappresenta la classe.
Ad esempio, per creare un'istanza di una classe chiamata Persona, che ha
un costruttore senza parametri:
Class c = Class.forName("Persona");
Object o = c.newInstance();
A questo punto potrai chiamare i metodi dell'oggetto, sia direttamente:
((Persona)o).parla("Ciao");
o tramite reflection:
Method m = c.getDeclaredMethod("parla", {String.class});
m.invoke(o, {"Ciao"});


Ho capito qual'è il problema, non era quello che pensavo.
Il tutto funzia, il problema è che usaco come esempio una Applet che
necissitava di parametri che non gli passavo, scusate per il disturba e
grazie per i suggerimenti


Ha un senso come cosa?
Se è per esercizio... perché no? :-)
Potresti pensare di fornire anche un AppletContext (vedi documentazione).
-- 
Ciao
	Fabrizio C.

 grazie per i suggerimenti
Se posti un sorgente in grado di caricare un applet e metterla in un frame
te ne sarei grato.
Oxy


Ecco a te:
//-----------Inizio codice----------
import java.awt.*;
import javax.swing.*;
import java.applet.*;
import java.awt.event.*;
class ExeApplet extends JFrame {
 public ExeApplet() {
  addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e) {
    dispose();
    System.exit(0);
   }
  });
 }
 public static void main(String args[]) {
  Applet pane=null;
  System.out.println("Starting ExeApplet...");
  ExeApplet mainFrame = new ExeApplet();
  Container C=mainFrame.getContentPane();
  try{
   pane=(Applet)Class.forName(args[0]).newInstance();}
  catch(ClassNotFoundException ex){System.out.println("Classe non
trovata");}
  catch(InstantiationException e){}
  catch(IllegalAccessException exe){}
  C.add(pane);
  pane.init();
  pane.start();
  mainFrame.setTitle(args[0]);
  mainFrame.pack();
  mainFrame.show();
 }
}
//-----------Fine codice------------
Ha però un problema.
Il tutto funziona se la tua Applet non abbisogna di parametri, se no ciccia.
Da ciò la prossima domanda.
C'è una maniera di passare dei parametri ad un applet da un altra classe?
Thax


 C'è una maniera di passare dei parametri ad un applet da un altra classe?
GRAZIE!!!!!!... Appena trovo il tempo la provo!
Riguardo ai parametri mi sembra di aver capito che si possa...
molto tempo fa avevo trovato la descrizione di questo problema
sul sito SUN... ma complice il mio mio scarso inglese ( :-/ ) e le sempre
presente mancanza di tempo avevo lasciato perdere...
Se provi a fare una ricerca sul sito magari ritrovi la pagina.
Ciao
Oxy
