Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

lancer une appli java depuis une autre

10 réponses
Avatar
yvon.thoravalNO-SPAM
Bonkour à toutes et à tous !!!


bonnes fêtes et meilleurs voeux. (tient d'ailleurs le collator de java
ne marche pas correctement, me semble t'il quand on utilise la ligature
"½", placée en fin d'alphabet...)

je cherche un moyen pour lancer mon appli avec le bon classpath, càd
avec les jars (look and feel) que l'utilisateur aurait pu ajouter dans
un répertoire spécifique (sur MacOS X j'ai pris soin de ne pas
positionner ma var d'environnement CLASSPATH, chaque appli a son propre
dossier lib).

mon idée serait d'avoir un launcher qui détermine les jars à mettre dans
le classpath puis lance l'appli proprement dite, que pensez-vous de cela
?

au reste qu'elle est la méthode équivalente, en java, à la commande
shell :

java -cp ${mon_classpath} machin.bidule.chose ???

--
yt

10 réponses

Avatar
Vincent Cantin
au reste qu'elle est la méthode équivalente, en java, à la commande
shell :

java -cp ${mon_classpath} machin.bidule.chose ???


Runtime.getRuntime().exec("java -cp ${mon_classpath} machin.bidule.chose");

ou bien lancer un nouveau thread sur ton machin.bidule.chose.main()

Bonne annee,
Vincent

Avatar
yvon.thoravalNO-SPAM
Vincent Cantin wrote:

Runtime.getRuntime().exec("java -cp ${mon_classpath} machin.bidule.chose");

ou bien lancer un nouveau thread sur ton machin.bidule.chose.main()


Ok merci, j'avais trouvé, in the mean time, pour trouver le classpath je
fais :

URL jarURL"""""""""""""""""""" = Thread.currentThread()

.getContextClassLoader().getResource("LauncherTest.class");

puisque le Launcher est lancé, sa classe existe bien, mais j'obtiens une
URL du genre :

jar:file:/path/to/jars/folder/monjar.jar!/LauncherTest.class

donc après je saussiçonne pour obtenir, enfin :

/path/to/jars/folder


y aurait-il un moyen + simple (quand "on" est dans un jar) ???

par ailleurs, je veux pouvoir déployer sur win*

j'ai mis partout File.separator ou File.pathSeparator, suivant le cas,
ça ca devrait être OK.

MAIS, existe t'il un user.home sur win comme sur les *nux ???

car je vai installer les fichiers de bd et les éventuels jars pour look
and feel dans un rép sous "user.home"...

donc je veux pouvoir créer sous win, un rép qui sous *nux serait :

~/.jcave avec le bazard qui va dedans...


Aller, bonne soirée à toutes zé à tous !!!
--
yt

Avatar
yvon.thoravalNO-SPAM
Vincent Cantin wrote:


ou bien lancer un nouveau thread sur ton machin.bidule.chose.main()


Comment fait-on pour lancer un nouveau thread ?

Suivant ton conseil, ce que j'ai fait dans le main du launcher :


public static void main(String[] args) {
init();
try {
Process proc = Runtime.getRuntime().exec("java -cp " +
getClassPath() + " yt.JCave");
} catch (IOException ioe) {
ioe.printStackTrace();
}
}

ce qui marche très bien, un grand merci !

MAIS petit problème "cosmétique", l'application, une fois lancée, perd
son icône, c'est "normal" car pour le système (qui gère les icones en
même temps que le lancement du launcher) il s'agit d'une autre
application...

Donc, j'ai l'impression qu'en lançant un nouveau thread ce pb aura
disparu right ?

Mais peut-on lancer un nouveau thread avec un classpath différent du
premier ?
--
yt

Avatar
Vincent Cantin
ou bien lancer un nouveau thread sur ton machin.bidule.chose.main()


Comment fait-on pour lancer un nouveau thread ?

Suivant ton conseil, ce que j'ai fait dans le main du launcher :


public static void main(String[] args) {
init();
try {
Process proc = Runtime.getRuntime().exec("java -cp " +
getClassPath() + " yt.JCave");
} catch (IOException ioe) {
ioe.printStackTrace();
}
}

ce qui marche très bien, un grand merci !

MAIS petit problème "cosmétique", l'application, une fois lancée, perd
son icône, c'est "normal" car pour le système (qui gère les icones en
même temps que le lancement du launcher) il s'agit d'une autre
application...

Donc, j'ai l'impression qu'en lançant un nouveau thread ce pb aura
disparu right ?

Mais peut-on lancer un nouveau thread avec un classpath différent du
premier ?
--
yt


Je n'en ai aucune idee, je n'ai jamais teste les lignes de code que je t'ai
donne :p
Chanceux que ca marche, toutefois ;-)

Joyeux Noel.
Vincent


Avatar
yvon.thoravalNO-SPAM
Vincent Cantin wrote:

Joyeux Noel.


Joyeuses Pâques...
--
yt

Avatar
Christophe M
Vincent Cantin wrote:


ou bien lancer un nouveau thread sur ton machin.bidule.chose.main()



Comment fait-on pour lancer un nouveau thread ?

Suivant ton conseil, ce que j'ai fait dans le main du launcher :


public static void main(String[] args) {
init();
try {
Process proc = Runtime.getRuntime().exec("java -cp " +
getClassPath() + " yt.JCave");
} catch (IOException ioe) {
ioe.printStackTrace();
}
}

ce qui marche très bien, un grand merci !

MAIS petit problème "cosmétique", l'application, une fois lancée, perd
son icône, c'est "normal" car pour le système (qui gère les icones en
même temps que le lancement du launcher) il s'agit d'une autre
application...

Donc, j'ai l'impression qu'en lançant un nouveau thread ce pb aura
disparu right ?

Mais peut-on lancer un nouveau thread avec un classpath différent du
premier ?


Pour lancer un Thread :
Thread th = new Thread(new Runnable(){ public voir run(){
// blablalba ;
}});
th.start();


Dans la méthode run() de l'interface Runnable, tu fais le boulot que
dois faire le thread. Suffit de faire un start() pour qu'il démarre.

Pour le reste, je ne sais pas si ça changera quelque chose


Avatar
Fabien
Yvon Thoraval wrote:
Bonkour à toutes et à tous !!!


bonnes fêtes et meilleurs voeux. (tient d'ailleurs le collator de java
ne marche pas correctement, me semble t'il quand on utilise la ligature
"½", placée en fin d'alphabet...)

je cherche un moyen pour lancer mon appli avec le bon classpath, càd
avec les jars (look and feel) que l'utilisateur aurait pu ajouter dans
un répertoire spécifique (sur MacOS X j'ai pris soin de ne pas
positionner ma var d'environnement CLASSPATH, chaque appli a son propre
dossier lib).

mon idée serait d'avoir un launcher qui détermine les jars à mettre dans
le classpath puis lance l'appli proprement dite, que pensez-vous de cela
?

au reste qu'elle est la méthode équivalente, en java, à la commande
shell :

java -cp ${mon_classpath} machin.bidule.chose ???



Bonjour,

As-tu jeté un coup d'oeil à ça :
http://jakarta.apache.org/commons/launcher/ ?

@+ Fabien

Avatar
yvon.thoravalNO-SPAM
Christophe M <mccricri_at_hotmail.com> wrote:

Pour le reste, je ne sais pas si ça changera quelque chose


Ouias, mais c'est ça l'important...
... in between j'ai appris (un petit peu) à me servir des threaD. Merci
pour l'info.
--
yt

Avatar
yvon.thoravalNO-SPAM
Fabien wrote:

As-tu jeté un coup d'oeil à ça :
http://jakarta.apache.org/commons/launcher/ ?


Ben non, merci pour l'info, je vais regardé cela de + près, mais j'ai
réalisé mon propre launcher "tout bête" grâce au conseil de Vincent
Cantin (fil + haut).

il suffit de faire, depuis mon "launcher" un bête :

Runtime.getRuntime().exec("java -cp ${mon_classpath}
machin.bidule.chose");

que je ne connaissais pas, donc je trafiquote dans les dirs pour
retrouver mes différentes et je set le bon classpath et hop, c'est ok
;-)

je me suis même arangé pour que le launcher s'occupe du splash screen et
sache reconnaître si l'appli est lancée depuis eclipse ou comme une
appli standard.


--
yt

Avatar
yvon.thoravalNO-SPAM
Fabien wrote:

As-tu jeté un coup d'oeil à ça :
http://jakarta.apache.org/commons/launcher/ ?


je viens d'y aller c'est pas con du tout, ça utilise ant...
--
yt