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 :

Trouver un fichier


Sujet :

Langage Java

  1. #1
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut Trouver un fichier
    Bonjour,

    je cherche à "trouver" une dll qui est dans mon projet, pour la charger.
    La classe Java se trouve dans src/adtree/ADTREEPlugin.java et la dll dans libotawa/lib/libotawa.dll

    Je pourrais la retrouver en utilisant File.getParent() ou File.getParentFile(), mais il me manque un fichier pour "démarrer". Bref comment faire ?

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().load("libotawa/lib/libotawa.dll");
    ?
    Mais a mon avis je n'ai pas compris ta question ...
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    votre problème est à coté de la plaque. vous dites "trouver dans votre projet", hors, lorsque l'application sera distribuée aux utilisateur, il n'y aura pas chez eux de "projet".

    Commencer par déterminer sous quelle structure vous ovuler installer ça chez vos utilisateurs, à partir de là, la méthode sera plus facile à mettre en oeuvre et surtout adaptée

  4. #4
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    L'application sera distribuée dans un jar.

    Ensuite il suffira à l'utilisateur de mettre le jar dans eclipse/dropins/otawa/plugins/ et de relancer Eclipse pour pouvoir utiliser le plugin, en ouvrant la perspective qui va bien via l'interface Eclipse.

    Je peux éventuellement décompresser le jar et le mettre dans le même dossier (et là la dll sera dans le dossier eclipse/dropins/otawa/plugins/libotawa/lib/).

    Pour l'instant j'ai ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public void start(BundleContext context) throws Exception {
    	super.start(context);
    	String path;
    	// build OJAWA path
    	String os = java.lang.System.getProperty("os.name");
    	if(os.equals("Linux")){
    		path = FileLocator.toFileURL(FileLocator.find(context.getBundle(), new Path("/"), null)).getPath();
    		path = path + "/libotawa/lib/libojawa.so";
    	}
    	else if(os.startsWith("Windows")){
    		path = FileLocator.toFileURL(FileLocator.find(context.getBundle(), new Path(""), null)).toString();
    		path = path + "libotawa/lib/libojawa.dll";
    	}
    qui fonctionne parfaitement sous linux, mais pas sous windows.

    Sous windows, la variable String path vaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /D:/Lecourt/workspace/ADTREE/libotawa/bin/libojawa.dll
    Le / avant D est un peu gênant
    Je pourrais l'enlever en manipulant le String, mais je préfèrerais une solution plus propre.

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    a partir du moment où votre code vos fournis une "URL" je travaillerais plutot comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    URL urlVersDll = new URL(base,"libotawa/lib/libojawa.dll");
    File fichier = new File(urlVersDll.toURI());
    String chemin = fichier.getAbsolutePath();
    Le but final étant de laisser File faire le travail

  6. #6
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    J'ai essayé en suivant cette méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    else if(os.startsWith("Windows")){
    	URL urlVersDll = new URL(FileLocator.find(context.getBundle(), new Path(""), null),"libotawa/lib/libojawa.dll");
    	File fichier = new File(urlVersDll.toURI());
    	path = fichier.getAbsolutePath();
    }
    J'obtiens un message d'erreur incompréhensible.
    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
    !SESSION 2011-05-11 10:30:40.764 -----------------------------------------------
    eclipse.buildId=M20110210-1200
    java.version=1.6.0_24
    java.vendor=Sun Microsystems Inc.
    BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=fr_FR
    Framework arguments:  -product org.eclipse.sdk.ide
    Command-line arguments:  -product org.eclipse.sdk.ide -data D:\Lecourt\workspace/../runtime-EclipseApplication -dev file:D:/Lecourt/workspace/.metadata/.plugins/org.eclipse.pde.core/Eclipse Application/dev.properties -os win32 -ws win32 -arch x86 -consoleLog
     
    !ENTRY org.eclipse.osgi 4 0 2011-05-11 10:30:56.544
    !MESSAGE An error occurred while automatically activating bundle OTAWA (2).
    !STACK 0
    org.osgi.framework.BundleException: Exception in adtree.ADTREEPlugin.start() of bundle OTAWA.
    	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:806)
    	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:755)
    	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370)
    	at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:284)
    	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:417)
    	at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:265)
    ETC.....
    J'ai aussi essayé en manipulant la String pour enlever le premier /, et là non plus il ne trouve pas la bibliothèque (et pourtant là le chemin est correct).

    Il n'est pas possible en Java pour un fichier de donner le chemin absolu vers lui-même ? Car à partir de ça, je devrais pouvoir retrouver ma dll.

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.osgi.framework.BundleException: Exception in adtree.ADTREEPlugin.start() of bundle OTAWA.
    -> ce serait bien de la connaitre cette exception

    Citation Envoyé par ManusDei Voir le message
    Il n'est pas possible en Java pour un fichier de donner le chemin absolu vers lui-même ?
    Ben si, c'est File.getAbsolutePath(), que vous utilisez déjà.

  8. #8
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    J'ai revu le code en enlevant le throws Exception et en rattrapant les exceptions manuellement, pour récupérer les messages d'erreur.

    Sauf que je n'ai pas plus de détails affichés

    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
    	public void start(BundleContext context) {
    		try{
    		super.start(context);
    		} catch (Exception e) {
    			logInfo("error catched: "+e.getMessage());
    		}
    		String path;
    		// build OJAWA path
    		String os = java.lang.System.getProperty("os.name");
    		if(os.equals("Linux")){
    			path = FileLocator.toFileURL(FileLocator.find(context.getBundle(), new Path("/"), null)).getPath();
    			path = path + "/libotawa/lib/libojawa.so";
    		}
    		else if(os.startsWith("Windows")){
    			//path = FileLocator.toFileURL(FileLocator.find(context.getBundle(), new Path(""), null)).getPath();
    			//path = path + "libotawa/lib/libojawa.dll";
    			URL urlVersDll;
    			try {
    				urlVersDll = new URL(FileLocator.find(context.getBundle(), new Path(""), null),"libotawa/lib/libojawa.dll");
    			File fichier;
    				fichier = new File(urlVersDll.toURI());
    				path = fichier.getAbsolutePath();
    			} catch (URISyntaxException e) {
    				logInfo("error catched: "+e.getMessage());
    				e.printStackTrace();
    			}  catch (MalformedURLException e) {
    				logInfo("error catched: "+e.getMessage());
    				e.printStackTrace();
     
    			}
    		}
    		else {
    			path = null;
    			ADTREEPlugin.logError("unsupported OS: OTAWA library shouldn't be accessible.", null);
    		}
    		// link with OJAWA
    		try {
    				System.load(path);
    				logInfo("using relocated OJAWA from " + path);
    		}
    		catch(java.lang.UnsatisfiedLinkError e) {
    			logInfo("can not find relocated OJAWA at " + path + ": attempting from libraries of LD_LIBRARY_PATH.");
    			System.loadLibrary("ojawa");
    		}catch (Exception e)
    		{
    			logInfo("error catched: "+e.getMessage());
    		}
    Edit : Après quelques recherches, c'est peut-être un problème lié au metadata eclipse.

Discussions similaires

  1. Trouver les fichiers par utilisateurs
    Par calfater dans le forum Windows XP
    Réponses: 2
    Dernier message: 11/10/2005, 17h30
  2. [Erreur]impossible de trouver le fichier de config du moteur
    Par julietteste dans le forum Bases de données
    Réponses: 5
    Dernier message: 10/05/2005, 18h34
  3. [langage] Trouver les fichiers sans la case
    Par nledez dans le forum Langage
    Réponses: 2
    Dernier message: 22/12/2004, 12h07
  4. [CR9] Trouver le fichier d'aide en FR
    Par Joleroy dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 13/09/2004, 14h20
  5. Trouver un fichier contenant une chaine ?
    Par narmataru dans le forum Linux
    Réponses: 2
    Dernier message: 29/04/2004, 10h49

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