2009-10-21 5 views
1

J'ai une application qui peut être étendue via des classes Java qui se conforment à une interface donnée. Si je lance le programme des classes de ligne de commande, je suis en mesure d'instancier l'add-on des classes en utilisant:Problème de chargement dynamique lorsque le programme s'exécute à partir d'un bocal

Class.forName("myAddon").newInstance(); 

Toutefois, si je Jar l'application (réglage de la principale correctement classe), je reçois une classe non exception trouvée. Quelqu'un peut-il nous éclairer sur ce qui se passe ici?

TIA, Adam

+0

comment sont vous spécifiez le pot sur la ligne de commande? – akf

+0

java -jar Myprogram.jar apchester

Répondre

1

J'ai réussi à obtenir ce travail à l'aide d'un URLClassLoader, en spécifiant le chemin de recherche pour le répertoire en cours comme suit:

URLClassLoader cl = new URLClassLoader(new URL[] {new File(".").toURI().toURL()}); 

Merci pour votre aide,

Adam

+0

Ne pourriez-vous pas mettre le fichier de classe dans un pot? (Btw: 'URLClassLoader.newInstance' est légèrement mieux.) –

+0

Bon point- merci. – apchester

0

La classe que vous cherchez est pas sur le chemin de classe. Si son dans un répertoire

à savoir MyClass.class MyJar.jar

Vous devez faire:

java -classpath . -jar MyJar.jar 

Mais vraiment nous avons besoin de plus d'informations pour répondre à la question. À quoi correspond la classe principale dans le manifeste du pot? Quel est votre chemin de classe? Comment spécifiez-vous quelle classe charger?

+0

Bonjour Rob, Je pensais que l'indicateur de chemin de classe était ignoré sur la ligne de commande lorsque -jar était spécifié. WRT vos questions, le classpath est seulement le classpath par défaut - aucun paramètre supplémentaire n'est défini. La classe principale définie dans le manifeste est com.mycompany.Main, qui fonctionne correctement lorsque l'erreur est levée dans la méthode principale de la classe. La classe à charger est spécifiée en tant que paramètre de ligne de commande. Adam – apchester

+0

Vous devez spécifier le chemin de classe dont vous avez besoin dans le manifeste JAR ou simplement appeler la classe avec java -cp quel que soit com.mycompany.Main –

+0

La classe à charger sur le chemin de classe par défaut? –

Questions connexes