Je chercherais à mettre à jour le classpath au runtime.
En effet, je charge des classes contenues dans des jars externes au
runtime. Le problème est que ces classes cherchent à charger des
ressources qui ne sont pas dans le classpath (icones ou autres). Par
conséquent, les getResource() ou autre Toolkit.getImage() ne marchent pas.
Pour le moment, avant de charger ces classes, j'ajoute au classpath
l'emplacement de ces jars au runtime, mais ca n'a aucun effet (comme,
malheureusement prévu) :
String jarPath = pluginDir.getPath() + File.separator + jar;
String classPath = System.getProperty("java.class.path");
System.setProperty("java.class.path", classPath.concat(PATH_SEPARATOR +
jarPath));
System.out.println(classPath + PATH_SEPARATOR + jarPath);
//...
//Chargement de la classe
Mais après ce code, les changements de classpath ne sont pas pris en
compte, et les ressources externes ne peuvent donc pas être chargées...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christophe M.
Je crois que dans ce cas là, tu vas devoir ecrire ton propre classloader. Celui du runtime étant instancié au démarrage, le changement ultérieur de la propriété système CLASSPATH n'aura pas d'effet sur lui (éventuellement sur d'autre programme lancé par Runtime.exec()...) Va donc falloir dériver le classloader pour tenir compte des "nouveaux" chemins que tu veux ajouter en dynamique...
Emmanuel PIC wrote:
Je chercherais à mettre à jour le classpath au runtime. En effet, je charge des classes contenues dans des jars externes au runtime. Le problème est que ces classes cherchent à charger des ressources qui ne sont pas dans le classpath (icones ou autres). Par conséquent, les getResource() ou autre Toolkit.getImage() ne marchent pas.
Pour le moment, avant de charger ces classes, j'ajoute au classpath l'emplacement de ces jars au runtime, mais ca n'a aucun effet (comme, malheureusement prévu) :
String jarPath = pluginDir.getPath() + File.separator + jar; String classPath = System.getProperty("java.class.path"); System.setProperty("java.class.path", classPath.concat(PATH_SEPARATOR + jarPath)); System.out.println(classPath + PATH_SEPARATOR + jarPath); //... //Chargement de la classe
Mais après ce code, les changements de classpath ne sont pas pris en compte, et les ressources externes ne peuvent donc pas être chargées...
Merci de votre aide
Je crois que dans ce cas là, tu vas devoir ecrire ton propre
classloader. Celui du runtime étant instancié au démarrage, le
changement ultérieur de la propriété système CLASSPATH n'aura pas
d'effet sur lui (éventuellement sur d'autre programme lancé par
Runtime.exec()...)
Va donc falloir dériver le classloader pour tenir compte des "nouveaux"
chemins que tu veux ajouter en dynamique...
Emmanuel PIC wrote:
Je chercherais à mettre à jour le classpath au runtime.
En effet, je charge des classes contenues dans des jars externes au
runtime. Le problème est que ces classes cherchent à charger des
ressources qui ne sont pas dans le classpath (icones ou autres). Par
conséquent, les getResource() ou autre Toolkit.getImage() ne marchent pas.
Pour le moment, avant de charger ces classes, j'ajoute au classpath
l'emplacement de ces jars au runtime, mais ca n'a aucun effet (comme,
malheureusement prévu) :
String jarPath = pluginDir.getPath() + File.separator + jar;
String classPath = System.getProperty("java.class.path");
System.setProperty("java.class.path", classPath.concat(PATH_SEPARATOR +
jarPath));
System.out.println(classPath + PATH_SEPARATOR + jarPath);
//...
//Chargement de la classe
Mais après ce code, les changements de classpath ne sont pas pris en
compte, et les ressources externes ne peuvent donc pas être chargées...
Je crois que dans ce cas là, tu vas devoir ecrire ton propre classloader. Celui du runtime étant instancié au démarrage, le changement ultérieur de la propriété système CLASSPATH n'aura pas d'effet sur lui (éventuellement sur d'autre programme lancé par Runtime.exec()...) Va donc falloir dériver le classloader pour tenir compte des "nouveaux" chemins que tu veux ajouter en dynamique...
Emmanuel PIC wrote:
Je chercherais à mettre à jour le classpath au runtime. En effet, je charge des classes contenues dans des jars externes au runtime. Le problème est que ces classes cherchent à charger des ressources qui ne sont pas dans le classpath (icones ou autres). Par conséquent, les getResource() ou autre Toolkit.getImage() ne marchent pas.
Pour le moment, avant de charger ces classes, j'ajoute au classpath l'emplacement de ces jars au runtime, mais ca n'a aucun effet (comme, malheureusement prévu) :
String jarPath = pluginDir.getPath() + File.separator + jar; String classPath = System.getProperty("java.class.path"); System.setProperty("java.class.path", classPath.concat(PATH_SEPARATOR + jarPath)); System.out.println(classPath + PATH_SEPARATOR + jarPath); //... //Chargement de la classe
Mais après ce code, les changements de classpath ne sont pas pris en compte, et les ressources externes ne peuvent donc pas être chargées...
Merci de votre aide
Emmanuel PIC
A vrai dire, je me suis déjà inspiré de son code ;) Je cherche une solution annexe en fait :/ Je crois que je vais apppliquer le doux principe du RTFM... :)
Christophe M. wrote:
Désolé, j'en sais pas plus que toi :-p Une bonne lecture : le code source de Jext (excellent éditeur) qui utilise cet "artifice" pour charger ses plugins. Tu devrais y trouver ce que tu veux ;-)
www.jext.org évidemment
Emmanuel PIC wrote:
Arf... Je ne suis pas vraiment expert en ClassLoader :/
Comment spécifier l'utilisation d'un ClassLoader personnel plutôt que du ClassLoader système? S'agit-il d'un paramètre à passer au démarrage de l'application?
Christophe M. wrote:
Je crois que dans ce cas là, tu vas devoir ecrire ton propre classloader. Celui du runtime étant instancié au démarrage, le changement ultérieur de la propriété système CLASSPATH n'aura pas d'effet sur lui (éventuellement sur d'autre programme lancé par Runtime.exec()...) Va donc falloir dériver le classloader pour tenir compte des "nouveaux" chemins que tu veux ajouter en dynamique...
Emmanuel PIC wrote:
Je chercherais à mettre à jour le classpath au runtime. En effet, je charge des classes contenues dans des jars externes au runtime. Le problème est que ces classes cherchent à charger des ressources qui ne sont pas dans le classpath (icones ou autres). Par conséquent, les getResource() ou autre Toolkit.getImage() ne marchent pas.
Pour le moment, avant de charger ces classes, j'ajoute au classpath l'emplacement de ces jars au runtime, mais ca n'a aucun effet (comme, malheureusement prévu) :
String jarPath = pluginDir.getPath() + File.separator + jar; String classPath = System.getProperty("java.class.path"); System.setProperty("java.class.path", classPath.concat(PATH_SEPARATOR + jarPath)); System.out.println(classPath + PATH_SEPARATOR + jarPath); //... //Chargement de la classe
Mais après ce code, les changements de classpath ne sont pas pris en compte, et les ressources externes ne peuvent donc pas être chargées...
Merci de votre aide
A vrai dire, je me suis déjà inspiré de son code ;)
Je cherche une solution annexe en fait :/ Je crois que je vais
apppliquer le doux principe du RTFM... :)
Christophe M. wrote:
Désolé, j'en sais pas plus que toi :-p
Une bonne lecture : le code source de Jext (excellent éditeur) qui
utilise cet "artifice" pour charger ses plugins. Tu devrais y trouver ce
que tu veux ;-)
www.jext.org évidemment
Emmanuel PIC wrote:
Arf... Je ne suis pas vraiment expert en ClassLoader :/
Comment spécifier l'utilisation d'un ClassLoader personnel plutôt que
du ClassLoader système? S'agit-il d'un paramètre à passer au démarrage
de l'application?
Christophe M. wrote:
Je crois que dans ce cas là, tu vas devoir ecrire ton propre
classloader. Celui du runtime étant instancié au démarrage, le
changement ultérieur de la propriété système CLASSPATH n'aura pas
d'effet sur lui (éventuellement sur d'autre programme lancé par
Runtime.exec()...)
Va donc falloir dériver le classloader pour tenir compte des
"nouveaux" chemins que tu veux ajouter en dynamique...
Emmanuel PIC wrote:
Je chercherais à mettre à jour le classpath au runtime.
En effet, je charge des classes contenues dans des jars externes au
runtime. Le problème est que ces classes cherchent à charger des
ressources qui ne sont pas dans le classpath (icones ou autres). Par
conséquent, les getResource() ou autre Toolkit.getImage() ne
marchent pas.
Pour le moment, avant de charger ces classes, j'ajoute au classpath
l'emplacement de ces jars au runtime, mais ca n'a aucun effet
(comme, malheureusement prévu) :
String jarPath = pluginDir.getPath() + File.separator + jar;
String classPath = System.getProperty("java.class.path");
System.setProperty("java.class.path",
classPath.concat(PATH_SEPARATOR + jarPath));
System.out.println(classPath + PATH_SEPARATOR + jarPath);
//...
//Chargement de la classe
Mais après ce code, les changements de classpath ne sont pas pris en
compte, et les ressources externes ne peuvent donc pas être chargées...
A vrai dire, je me suis déjà inspiré de son code ;) Je cherche une solution annexe en fait :/ Je crois que je vais apppliquer le doux principe du RTFM... :)
Christophe M. wrote:
Désolé, j'en sais pas plus que toi :-p Une bonne lecture : le code source de Jext (excellent éditeur) qui utilise cet "artifice" pour charger ses plugins. Tu devrais y trouver ce que tu veux ;-)
www.jext.org évidemment
Emmanuel PIC wrote:
Arf... Je ne suis pas vraiment expert en ClassLoader :/
Comment spécifier l'utilisation d'un ClassLoader personnel plutôt que du ClassLoader système? S'agit-il d'un paramètre à passer au démarrage de l'application?
Christophe M. wrote:
Je crois que dans ce cas là, tu vas devoir ecrire ton propre classloader. Celui du runtime étant instancié au démarrage, le changement ultérieur de la propriété système CLASSPATH n'aura pas d'effet sur lui (éventuellement sur d'autre programme lancé par Runtime.exec()...) Va donc falloir dériver le classloader pour tenir compte des "nouveaux" chemins que tu veux ajouter en dynamique...
Emmanuel PIC wrote:
Je chercherais à mettre à jour le classpath au runtime. En effet, je charge des classes contenues dans des jars externes au runtime. Le problème est que ces classes cherchent à charger des ressources qui ne sont pas dans le classpath (icones ou autres). Par conséquent, les getResource() ou autre Toolkit.getImage() ne marchent pas.
Pour le moment, avant de charger ces classes, j'ajoute au classpath l'emplacement de ces jars au runtime, mais ca n'a aucun effet (comme, malheureusement prévu) :
String jarPath = pluginDir.getPath() + File.separator + jar; String classPath = System.getProperty("java.class.path"); System.setProperty("java.class.path", classPath.concat(PATH_SEPARATOR + jarPath)); System.out.println(classPath + PATH_SEPARATOR + jarPath); //... //Chargement de la classe
Mais après ce code, les changements de classpath ne sont pas pris en compte, et les ressources externes ne peuvent donc pas être chargées...
Merci de votre aide
Christophe M.
Désolé, j'en sais pas plus que toi :-p Une bonne lecture : le code source de Jext (excellent éditeur) qui utilise cet "artifice" pour charger ses plugins. Tu devrais y trouver ce que tu veux ;-)
www.jext.org évidemment
Emmanuel PIC wrote:
Arf... Je ne suis pas vraiment expert en ClassLoader :/
Comment spécifier l'utilisation d'un ClassLoader personnel plutôt que du ClassLoader système? S'agit-il d'un paramètre à passer au démarrage de l'application?
Christophe M. wrote:
Je crois que dans ce cas là, tu vas devoir ecrire ton propre classloader. Celui du runtime étant instancié au démarrage, le changement ultérieur de la propriété système CLASSPATH n'aura pas d'effet sur lui (éventuellement sur d'autre programme lancé par Runtime.exec()...) Va donc falloir dériver le classloader pour tenir compte des "nouveaux" chemins que tu veux ajouter en dynamique...
Emmanuel PIC wrote:
Je chercherais à mettre à jour le classpath au runtime. En effet, je charge des classes contenues dans des jars externes au runtime. Le problème est que ces classes cherchent à charger des ressources qui ne sont pas dans le classpath (icones ou autres). Par conséquent, les getResource() ou autre Toolkit.getImage() ne marchent pas.
Pour le moment, avant de charger ces classes, j'ajoute au classpath l'emplacement de ces jars au runtime, mais ca n'a aucun effet (comme, malheureusement prévu) :
String jarPath = pluginDir.getPath() + File.separator + jar; String classPath = System.getProperty("java.class.path"); System.setProperty("java.class.path", classPath.concat(PATH_SEPARATOR + jarPath)); System.out.println(classPath + PATH_SEPARATOR + jarPath); //... //Chargement de la classe
Mais après ce code, les changements de classpath ne sont pas pris en compte, et les ressources externes ne peuvent donc pas être chargées...
Merci de votre aide
Désolé, j'en sais pas plus que toi :-p
Une bonne lecture : le code source de Jext (excellent éditeur) qui
utilise cet "artifice" pour charger ses plugins. Tu devrais y trouver ce
que tu veux ;-)
www.jext.org évidemment
Emmanuel PIC wrote:
Arf... Je ne suis pas vraiment expert en ClassLoader :/
Comment spécifier l'utilisation d'un ClassLoader personnel plutôt que du
ClassLoader système? S'agit-il d'un paramètre à passer au démarrage de
l'application?
Christophe M. wrote:
Je crois que dans ce cas là, tu vas devoir ecrire ton propre
classloader. Celui du runtime étant instancié au démarrage, le
changement ultérieur de la propriété système CLASSPATH n'aura pas
d'effet sur lui (éventuellement sur d'autre programme lancé par
Runtime.exec()...)
Va donc falloir dériver le classloader pour tenir compte des
"nouveaux" chemins que tu veux ajouter en dynamique...
Emmanuel PIC wrote:
Je chercherais à mettre à jour le classpath au runtime.
En effet, je charge des classes contenues dans des jars externes au
runtime. Le problème est que ces classes cherchent à charger des
ressources qui ne sont pas dans le classpath (icones ou autres). Par
conséquent, les getResource() ou autre Toolkit.getImage() ne marchent
pas.
Pour le moment, avant de charger ces classes, j'ajoute au classpath
l'emplacement de ces jars au runtime, mais ca n'a aucun effet (comme,
malheureusement prévu) :
String jarPath = pluginDir.getPath() + File.separator + jar;
String classPath = System.getProperty("java.class.path");
System.setProperty("java.class.path", classPath.concat(PATH_SEPARATOR
+ jarPath));
System.out.println(classPath + PATH_SEPARATOR + jarPath);
//...
//Chargement de la classe
Mais après ce code, les changements de classpath ne sont pas pris en
compte, et les ressources externes ne peuvent donc pas être chargées...
Désolé, j'en sais pas plus que toi :-p Une bonne lecture : le code source de Jext (excellent éditeur) qui utilise cet "artifice" pour charger ses plugins. Tu devrais y trouver ce que tu veux ;-)
www.jext.org évidemment
Emmanuel PIC wrote:
Arf... Je ne suis pas vraiment expert en ClassLoader :/
Comment spécifier l'utilisation d'un ClassLoader personnel plutôt que du ClassLoader système? S'agit-il d'un paramètre à passer au démarrage de l'application?
Christophe M. wrote:
Je crois que dans ce cas là, tu vas devoir ecrire ton propre classloader. Celui du runtime étant instancié au démarrage, le changement ultérieur de la propriété système CLASSPATH n'aura pas d'effet sur lui (éventuellement sur d'autre programme lancé par Runtime.exec()...) Va donc falloir dériver le classloader pour tenir compte des "nouveaux" chemins que tu veux ajouter en dynamique...
Emmanuel PIC wrote:
Je chercherais à mettre à jour le classpath au runtime. En effet, je charge des classes contenues dans des jars externes au runtime. Le problème est que ces classes cherchent à charger des ressources qui ne sont pas dans le classpath (icones ou autres). Par conséquent, les getResource() ou autre Toolkit.getImage() ne marchent pas.
Pour le moment, avant de charger ces classes, j'ajoute au classpath l'emplacement de ces jars au runtime, mais ca n'a aucun effet (comme, malheureusement prévu) :
String jarPath = pluginDir.getPath() + File.separator + jar; String classPath = System.getProperty("java.class.path"); System.setProperty("java.class.path", classPath.concat(PATH_SEPARATOR + jarPath)); System.out.println(classPath + PATH_SEPARATOR + jarPath); //... //Chargement de la classe
Mais après ce code, les changements de classpath ne sont pas pris en compte, et les ressources externes ne peuvent donc pas être chargées...