Lancer un .jar a partir d'un projet Eclipse (JAVA)

cs_JazzyLove Messages postés 38 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 7 avril 2008 - 10 mars 2008 à 10:27
cs_JazzyLove Messages postés 38 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 7 avril 2008 - 10 mars 2008 à 12:29
Bonjour tout le monde,

Cela fait plus de 5 jours que je cherche sans trouver une solution, le  probleme le voici :

il y a un programme .jar qui s'appelle felix.jar, une fois lancé avec la commande "java -jar felix.jar" il offre un shell  qui permet d'administrer des bundles, eux meme des fichiers.jar, l'admnistartion comporte entre autres une installation et une desinstallation d'un bundle.
une fois sur le shell de felix, pour installer un bundle par exemple il faut tapper la commande install file:/C:\<chemin du fichier bundle.jar>
Je veux creer une interface graphique qui permet d'administrer ces bundles en faisont appel a felix.jar
L'interface est toute prete dans la quelle il y a un bouton "install". je veux qu'une fois je clique sur ce bouton, l'executable .jar se lance, et la commande install file:/C:\<chemin du fichier bundle.jar> s'excute.

franchement je suisbloqué depuis pas mal de temps et mon projet n'avance pas a cause de ca

Quel qu'un a une idee ?

Merci d'avance

2 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
10 mars 2008 à 11:20
Salut:

Est ce que tu veux charger le JAR ou bien l'exécuter?

Pour lancer l'exécution d'un fichier JAR:

public static void launch(String filename) {
    try {
       String[] commands = {"java", "-jar", filename};
       Runtime.getRuntime().exec(commands);
    } catch (IOException e) {
       e.printStackTrace();
    }
}
0
cs_JazzyLove Messages postés 38 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 7 avril 2008
10 mars 2008 à 12:29
En fait quand j'utilise cette classe, felix se lance bien et j'arrive a lancer une commande mais je ne peux pas lancer la commande a partir de l'interface graphique.

Je viens d'avoir une idee, je ne sais pas trop si ca va marcher ou pas mais je m'explique :

Comme j'arrive a faire communiquer 2 bundles par l'envoie de chaine de characteres, je me dis que si jamais je construit l'interface graphique sous forme d'un bundle que j'appelerai IHM.jar, et qu'il exsiste deja un bundle tout pret dans felix qui se charge d'executer les commandes ecrites sur le shell de felix, on appelera ce bundle launcher.jar

Donc mon idee est que le bundle IHM.jar envoie la chaine "install file:\<chemin du bundle a installer> au bundle launcher.jar pour que celui ci execute  la commande.

Le code d'un bundle est de cette forme :

package bundlegraph;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

    public void start(BundleContext context) throws Exception {
    // cette methode sert a lancer le bundle, on peut y mettre tout se qu'on veut, notamant du code permettant de          // creer une interface graphique
    }

    public void stop(BundleContext context) throws Exception {
     
    }
}

J'ai construit egalement une interface graphique minimale dont le code est le suivant :

package gui.first;

import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;

public class myFrame extends JFrame {
    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;

    public static void main(String[] args) {
       SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                myFrame thisClass = new myFrame();
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                thisClass.setVisible(true);
            }
        });
    }

    public myFrame() {
        super();
        initialize();
    }

    private void initialize() {
        this.setSize(300, 200);
        this.setContentPane(getJContentPane());
        this.setTitle("JFrame");
    }

    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(new BorderLayout());
        }
        return jContentPane;
    }

}

Ce que je veux faire c'est d'ajouter le code qui construit l'interface dans la methode start du bundle, c'est a dire comme suit :

public void start(BundleContext context) throws Exception {
//code pour construire une frame
}

Comme ca quand le bundle se lance, puisque la premiere chose qu'il fait est d'executer la methode start, il va construire l'interface graphique et ce bundle sera donc le bundle IHM.jar
0
Rejoignez-nous