Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Egen ClassLoader

Postades av 2005-07-15 00:03:29 - Tom Granqvist, i forum java, Tråden har 7 Kommentarer och lästs av 1784 personer

Håller på och bygger ett system för plugins och har stött på lite problem. Hittade tips på nätet att jag behövde en egen classloader och byggde denna:
<code:java>
package homestudio.plugin;

import java.io.*;

public class PluginLoader extends ClassLoader {

private static PluginLoader loader = new PluginLoader();

public static Plugin loadPlugin( String name )
throws ClassNotFoundException,
InstantiationException,
IllegalAccessException{
// här blir det fel, se nedan.
Plugin plugin = (Plugin) ( loader.loadClass( name, true ) ).newInstance();
return plugin;
}
}
</code>

Plugin är ett interface som min testplugin implementerar
<code:java>
/**
* Defines the interface for a plugin to HomeStudio.
*
* @version 0.1 07/13/05
* @author Tom Granqvist
*/

public interface Plugin {

// Returns the plugins UI-component.
public JPanel getPluginUI( );

// Returns all info about the plugin
public String getPluginInfo( );
}
</code>

I huvudkoden försöker jag kalla på koden: Plugin p = PluginLoader.loadPlugin( "TestPlugin" ); men får ett InstantiationException på rad 15 i PluginLoader klassen. Vad gör jag för fel?


Svara

Sv: Egen ClassLoader

Postades av 2005-07-15 00:25:52 - Tom Granqvist

Om jag tar bort konstruktorn från TestPlugin klassen funkar allt klockrent! Tycker dock inte att det är en bra lösning, pluginen ska ju kunna köras också som egen application i vissa fall! Nåja, det får lösasej senare.


Svara

Sv:Egen ClassLoader

Postades av 2005-07-15 08:48:58 - Simon Dahlbacka

det är inte så att du har en privat konstruktor som inte tar några parametrar alternativt bara såna konstruktorer som tar parametrar?


Svara

Sv: Egen ClassLoader

Postades av 2005-07-15 13:19:45 - Tom Granqvist

Så var det, min konstruktor tog paramateren PluginHost. Men kom på att pluginen kasnke inte behöver en konstruktor.. Satte till en metoden setPluginHost istället som gör samma som konstruktorn.


Svara

Egen ClassLoader, följdfråga

Postades av 2005-07-17 19:28:16 - Tom Granqvist

Om jag vill ladda min plugin från en anna katalog, hur gör jag det? Det om dom ligger i classpathen men man ska kunna ställa in i programmet vilken katalog dom laddas från.


Svara

Sv: Egen ClassLoader, följdfråga

Postades av 2005-08-08 13:35:21 - Patrik Hällsten

En kanske inte så bra lösning, men den enklaste. kopiera bara in dem i classpathen och ladda de sen...


Svara

Sv:Egen ClassLoader, följdfråga

Postades av 2005-08-08 19:13:36 - Tom Granqvist

Löste det, på ett annat sätt.

public class PluginLoader{
	
	/**
	 * Loads a plugin from a JAR-file.
	 *
	 * Extracts the Plugin-Class entry from the specified JAR file and
	 * loads the associated class.
	 *
	 * @param file	the JAR-file to get plugin from.
	 *
	 * @return		the loaded plugin.
	 */
	public Plugin loadPluginFromFile( String file ) 
		throws PluginLoadingException{
				
		Plugin plugin = null;
		String cls = "";
		
		try{
			URL url = new URL( "file:" + file );
			String jar = "jar:file:" + file + "!/";
			
			JarURLConnection uc = 
				(JarURLConnection) new URL( jar ).openConnection();
				
			cls = uc.getMainAttributes().getValue( "Plugin-Class");
			
			URLClassLoader ucl = new URLClassLoader( new URL[]{	url } );
			
			plugin = (Plugin)ucl.loadClass( cls ).newInstance();
			
		} catch ( MalformedURLException mux ) {
			throw new PluginLoadingException( "Error finding file "+file, mux );
		} catch ( IOException iox ) {
			throw new PluginLoadingException( "Error accessing manifest", iox );				
		} catch ( ClassNotFoundException cfx) {
			throw new PluginLoadingException( "Class "+ cls  +" not found", cfx );
		} catch( InstantiationException ix ) {
			throw new PluginLoadingException( "Class "+ cls +" not a plugin!", ix );
		} catch ( IllegalAccessException iax ) {
			throw new PluginLoadingException( "Access not allowed", iax );
		}
		
		return plugin;
	}
}

Skickar in namnet på en jar-fil och använder en URLClassLoader för att ladda klassen som jar:ens attribut Plugin-Class pekar på. Funkar med sökväg och allt :)


Svara

Problem med getResource()

Postades av 2005-08-12 21:26:21 - Tom Granqvist

Klassen TestPlugin laddas mha PluginLoader och det fungerar bra. När jag i TestPlugin försöker ladda en lyckas det inte. Bilden finns i samma jar-fil som pluginen och hämtas enligt

//anna kod här...
Icon i = createImageIcon( "bild.gif" );
JButton button = new JButton( "Test", i );
// ...och här.

private ImageIcon createImageIcon( String file ){
	URL url = getClass().getClassLoader().getResource( "images/" + file );
	if( url == null )
		return null;
	return new ImageIcon( url );
    }


Om bild.gif finns i pluginens jar-fil hittas den inte, men om den finns i huvudprogrammets jar så fungerar det!
Jag har på känn att det har något med classpathen att göra, rätta mej om jag har fel. Lite skumt om man inte ha egna "resurser" i pluginens jar.


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 615
27 953
271 709
553
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies