IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Executer un fichier .java externe au programme


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut Executer un fichier .java externe au programme
    Bonjour, mon programme permet de créer un fichier Universe.java qui contiendra une scène 3D. A coté de celà, j'ai un fichier Main.java qui permet d'instancier ma classe Universe, de définir la taille de la fenêtre et de la rendre visible.

    J'aimerais, à l'aide d'un bouton dans mon programme principal, avoir un aperçu de cette scène 3D. Pour cela, il me faut exécuter le fichier Main.java qui lui même appellera Universe.java.

    Le code présent dans Universe.java se trouve également dans un String dans mon programme principal.

  2. #2
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Bonjour, tu peux lancer un autre process : FAQ
    Sinon tu peux faire un import de ta classe Main.java et l'appeler en ayant créé un nouveau thread.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut
    Pourrais tu être un peu plus précis stpl?

    J'ai une classe Display avec à l'intérieur une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private void ApercuButtonMouseClicked(java.awt.event.MouseEvent evt) {                             
     
    }
    je souhaite aller exécuter mon fichier ..//generated/Universe.java qui sera appelé grâce au main.java présent dans le même dossier

    le main contient uniquement ces quelques lignes qui me permettent de lancer le canevas 3D de ma scène.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Main {
        public static void main(String[] args) {       
            Universe myUniverse = new Universe();
            myUniverse.setSize(900,900);
            myUniverse.setVisible(true);
        }
    }
    je doit donc ,dans ma classe Display, faire un import de ..//generated/Main.java et instancier celui ci à l'intérieur de ma méthode ApercuButtonMouseClicked?

  4. #4
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Tu pourrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private void ApercuButtonMouseClicked(java.awt.event.MouseEvent evt) {                             
        Thread monApercu = new Thread("Apercu") {
            public void run() {
                Main.main(null);
            }
        };
        monApercu.start();
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void ApercuButtonMouseClicked(java.awt.event.MouseEvent evt) {                             
        try {
            Process proc = Runtime.getRuntime().exec("java Main");
        } catch (IOException e) {
     
        } 
    }
    Voila une approche, à toi de d'ajouter les imports ou de mettre le bon chemin de Main dans le exec.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut
    Concernant ta première méthode, je n'arrive pas à faire un import de la classe avec le chemin ..//generated/Main.java...

    Concernant la deuxième méthode, il passe dans le catch à chaque fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void ApercuButtonMouseClicked(java.awt.event.MouseEvent evt) {                                          
            try {
                Process proc = Runtime.getRuntime().exec("..//generated/Main.java");
            } catch (IOException e) {
                System.out.println("catch!");
            }   
        }

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut
    quelqu'un aurait une idée du pourquoi du comment il passe toujours dans le catch?

    j'ai vérifié le chemin du fichier ce n'est donc pas cela qui pose problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void ApercuButtonMouseClicked(java.awt.event.MouseEvent evt) {                                          
            try {
                Process proc = Runtime.getRuntime().exec("java .//generated/Main.java");            
            } catch (IOException e) {
                System.out.println("catch!");
            }
        }

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 80
    Points : 75
    Points
    75
    Par défaut
    Salut,

    Tu lances la jvm sur un fichier source, donc c'est normal que ça ne fonctionne pas.

    Afin de répéter morph :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Process proc = Runtime.getRuntime().exec("java Main");

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut
    oui mais dans ce cas il ne saura pas de quel Main il s'agit non?

    dois-je le compiler d'abord? comme ceci, afin d'executer aussi Universe (car c'est Universe qu'il est important de lancé, Main.java crée une nouvelle instance de Universe et le rend visible, mais c'est tout)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Process proc = Runtime.getRuntime().exec("javac .//generated/Main.java");
    Process proc2 = Runtime.getRuntime().exec("javac .//generated/Universe.java");
    Process proc3 = Runtime.getRuntime().exec("java Main");
    Process proc4 = Runtime.getRuntime().exec("java Universe");

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 80
    Points : 75
    Points
    75
    Par défaut
    Je pense que tu devrais utiliser un fichier batch ou même ant.
    Au moins tu n'auras qu'un process à démarrer.

    Je ne sais pas si tu connais ant. Si tu ne connais pas je t'encourage à t'y familiariser un petit peu.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut
    ok je vais essayer de voir ça. Merci

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut
    ok, javac n'est pas une commande reconnu, ça n'aide surement pas. pourtant j'ai le JDK installé, j'a imême essayé de le réinstall

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut
    bon, j'arrive à exécuter javac, sauf que dans mon fichier Main.java il appel Universe donc lors de la compilation du Main.java, il ne trouve pas Universe, logique. Si je compile Universe en premier, il n'arrive pas à aller trouver un import de celui ci...

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 80
    Points : 75
    Points
    75
    Par défaut
    Il te faut ajouter le répertoire bin de ton jdk dans le PATH pour que la commande soit reconnue partout.

    Si j'ai bien compris, tu as :

    Display.java : qui ne changera jamais
    Main.java : qui peut être modifié
    Universe.java : "

    Donc dans ta Display tu veux que lorsque l'on clique sur un boutton, il compile Main.java et Universe.java, et ensuite exécute Main.

    Est-ce bien ta situation?

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par yannick1717 Voir le message
    Donc dans ta Display tu veux que lorsque l'on clique sur un boutton, il compile Main.java et Universe.java, et ensuite exécute Main.
    c'est exactement ça.



    Pour être plus exacte au niveau des classes:

    Display.java : ne change jamais, est l'affichage du programme principal
    Main.java : ne change jamais, instancie un new Universe
    Universe : ne changera jamais, affiche un scène 3D, est instancié par Main.java

    dans Main.java il y a seulement ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      public static void main(String[] args) {
           Universe myUniverse = new Universe();
           myUniverse.setSize(900,900);
           myUniverse.setVisible(true);
        }

    et ensuite Universe.java contient tout une scène 3D, avec des import etc...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    import com.sun.j3d.loaders.*;
    import com.sun.j3d.loaders.objectfile.ObjectFile;
    import java.awt.*;
    import com.sun.j3d.utils.universe.SimpleUniverse;
    import javax.media.j3d.*;
    import com.sun.j3d.utils.geometry.*;
    import java.awt.event.*;
    import java.io.FileNotFoundException;
    import java.util.logging.*;
    import javax.vecmath.*;
     
    public class Universe extends Frame implements WindowListener
    {
        public Universe(){
            super("- Scène 3D -");
            this.addWindowListener(this);
            setLayout(new BorderLayout());
            Canvas3D myCanvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
            add("Center", myCanvas3D);
            BranchGroup myScene = createSceneGraph();
            myScene.compile();
     
            SimpleUniverse mySimpleUniverse = new SimpleUniverse(myCanvas3D);
            mySimpleUniverse.getViewingPlatform().setNominalViewingTransform();
            mySimpleUniverse.addBranchGraph(myScene);
        }
     
        public BranchGroup createSceneGraph(){        
    	BranchGroup objRoot = new BranchGroup();
     
    	Transform3D trans1 = new Transform3D();
    	trans1.set(new Vector3f(0.5f, 0.5f, 0.0f));
     
    	TransformGroup myTransformGrouptrans1 = new TransformGroup(trans1);
    	objRoot.addChild(myTransformGrouptrans1);
     
    	return objRoot;
        }
     
        public BranchGroup ImportationObj(String chemin) throws FileNotFoundException{
            ObjectFile objet = new ObjectFile();
            Scene scene = null;
     
            scene = objet.load(chemin);
     
            return scene.getSceneGroup();
        }
     
        public void windowActivated(WindowEvent e){}
    	public void windowClosed(WindowEvent e){}
    	public void windowDeactivated(WindowEvent e){}
    	public void windowDeiconified(WindowEvent e){}
    	public void windowIconified(WindowEvent e){}
    	public void windowOpened(WindowEvent e){}
     
    	public void windowClosing(WindowEvent e)
    	{
    		System.exit(1);
    	}     
    }

    et dans mon Display.java, lorsque je clic le bouton ça appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void ApercuButtonMouseClicked(java.awt.event.MouseEvent evt) {                                          
            try {
                Process proc1 = Runtime.getRuntime().exec("javac .//generated/Main.java");
                Process proc2 = Runtime.getRuntime().exec("javac .//generated/Universe.java");
                Process proc3 = Runtime.getRuntime().exec("java Main");
                Process proc4 = Runtime.getRuntime().exec("java Universe");
            } catch (IOException e) {
                System.out.println("catch!");
            }
        }

    c'est la situation actuelle

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 80
    Points : 75
    Points
    75
    Par défaut
    Désolé, mais je ne cerne pas trop l'objectif.

    Si ces sources ne seront jamais modifiées, dans quel but veux-tu compiler et lancer une nouvelle jvm.

    [edit] Soit,

    tu peux aussi faire "javac *.java"

    et ensuite "java Main". (c'est ici que l'universe est créé).
    java Universe n'a pas de sens si cette classe n'a pas de méthode main

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut
    en faite Universe.java change à chaque fois mais pas radicalement, sa sera toujours plus ou moins la même chose avec juste un petit bout de code qui sera modifié, mais qui n'influe pas sur le lancement du programme.

    je vais donc essayer de compiler les 2 et de lancé le main.java ensuite. le problème c'est que sa ne compile pas le main.java étant donné qu'a l'intérieur de celui ci il appel Universe qui lui n'est pas encore compilé. Et si je compile Universe il me dit "cannot acces com.sun.j3d.loaders.objectfile.ObjectFile" donc impossible d'effectuer les import apparemment (comme c'est le premier de la liste)

    donc quelque chose comme sa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try {
         Process proc1 = Runtime.getRuntime().exec("javac .//generated/*.java");            
         Process proc2 = Runtime.getRuntime().exec("java Main");            
    } 
    catch (IOException e) {
         System.out.println("catch!");
    }
    renvoie toujours le catch

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 8
    Points
    8
    Par défaut
    l'erreur vient apparemment de la version du JDK...d'après ce que j'ai compris.

    sa me donne

    "cannot access com.sun.j3d.loaders.objectfile.ObjectFile
    bad class file : C:\j2sdk1.4.2_16\jre\lib\ext\j3dutils.jar(com/sun/j3d/loaders/objectfile/ObjectFile.class)
    class file has wrong version 49.0, should be 48.0
    please remove or make sur it appears in the correct subdirectory of the classpath."

Discussions similaires

  1. [MooTools] Chargement de fichiers java externes
    Par peliphe dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 02/10/2009, 12h34
  2. Executer un fichier via un programme externe
    Par kashmir_ dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 26/08/2007, 02h02
  3. executer un fichier java a partir d'un autre!
    Par moon5 dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2007, 14h23
  4. [SQL server 2000]Execution de Fichier SQL externe
    Par titanblanc dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 09/08/2006, 15h42
  5. Executer un fichier.java
    Par jcodeunpeu dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 03/04/2006, 22h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo