Newsgroup: it.comp.java
Titolo: [help] Caricamento di un .class in RAM e JProgressBar...

ce la faccio da solo :(
non ho ancora provato a fare quello che chiedi 
pero' mi servirebbe per il mio programma (jame)
ho scritto un class loader
il mio class loader contiene una funzione che legge i file class da una directory 
che voglio io e li mette in un array, quindi si potrebbe modificare il codice in modo
da collegare il caricamento dei byte con la barra di progressione
il mio class loader carica solo alcune classi 
le altre vengono caricate dalla super classe
questo e' il codice del class loader (cosi' com'e' in jame)
se riesci a tirarne fuori qualcosa mi fai sapere?
(per collegare la bar con il class loader dovresti 
utilizzare un sistema tipo ProgressListener/ProgressEvent
cioe' il classloader dovrebbe generare degli eventi che
vengono poi intercettati da una classe che estende 
jprogressbar, mi sono spiegato?)
 
/*
 * PluginClassLoader.java (version 1.1)
 *
 * Copyright (C) 2000 Andrea Medeghini
 * 
http://jame.sourceforge.net
 *
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
 */
package org.jame.core;
import java.net.*;
import java.io.*;
import java.util.Vector;
/*****************************************************************************
 Estensione della classe java.lang.ClassLoader.
 *****************************************************************************/
public final class PluginClassLoader extends ClassLoader
{
	private File root;
	public PluginClassLoader(Vector plugins)
	{
		root = new File(System.getProperty("jame.plugins.dir","plugins"));
		String[] files = root.list();
		if (root.exists())
		{
			if (files != null)
			{
				for (int i = 0; i < files.length; i++)
				{
					File file = new File(root,files[i]);
					if (file.isDirectory())
					{
						try
						{
		Class c = loadPlugin(file.getName() + ".jamePlugin");
							if (c != null)
							{
								resolveClass(c);
		Plugin plugin = (Plugin)c.newInstance();
                		System.out.println("plugin " + plugin.getPluginName() + " loaded");
								plugins.addElement(plugin);
							}
						}
						catch (Exception e)
						{
							System.out.println(e);
						}
					}
				}
			}
		}
	}
	private Class loadPlugin(String name)
	{
		return (load(new File(root,name.replace('.','/') + ".class"),name));
	}
	private Class load(File file,String name)
	{
		if (file.exists())
		{
			try
			{
//qui va' modificato in modo da generare un evento che
//riporta lo stato di avanzamento del caricamento
byte[] code = load(new BufferedInputStream(new FileInputStream(file)),file.length());
				if (code != null)
				{
					return (defineClass(name,code,0,code.length));
				}
			}
			catch (Exception e)
			{
				System.out.println(e);
			}
		}
		return (null);
	}
	private byte[] load(BufferedInputStream stream,long l) throws IOException
	{
		byte[] buffer = new byte[(int)l];
		if (stream.read(buffer) > 0)
		{
			return (buffer);
		}
		return (null);
	}
	protected Class findClass(String name)
	{
		return (load(new File(root,name.replace('.','/') + ".class"),name));
	}
	protected URL findResource(String name)
	{
                String resource = name.substring(0,name.lastIndexOf(".") - 1);
 
                String extension = name.substring(name.lastIndexOf(".") - 1);
		File file = new File(root,resource.replace('.','/') + extension);
		if (file.exists())
		{
                        try
                        {
                                return (file.toURL());
                        }
                        catch (Exception e)
                        {
                        }
                }
 
		file = new File(resource.replace('.','/') + extension);
		if (file.exists())
		{
                        try
                        {
                                return (file.toURL());
                        }
                        catch (Exception e)
                        {
                        }
                }
                return (null);
	}
	protected Class loadClass(String name,boolean resolve) throws ClassNotFoundException
	{
		Class c = findLoadedClass(name);
		if (c == null)
		{
			c = findClass(name);
		}
		if (c == null)
		{
			c = findSystemClass(name);
		}
		if (resolve)
		{
			resolveClass(c);
		}
		return (c);
	}
}
mancano funzioni come 
addProgressListener(...)
removeProgressListener(...)
l'interfaccia ProgressListener
e la classe evento ProgressEvent 
e forse qualcosa che ancora mi sfugge :)
ciao_O
___________________________________________
http://digilander.iol.it/schiele
http://jame.sourceforge.net

ho scritto un class loader
Grazie! ;)