Accueil > Forum > > > > System.getProperty("user.dir") = NULL
System.getProperty("user.dir") = NULL
jeudi 22 mai 2008 à 17:44:02 |
System.getProperty("user.dir") = NULL

metalkev64
|
Salut,
J'ai une application qui doit vérifier la présence de fichier avant de rendre visible ses fenêtres. Si les fichiers ne son pas trouvé, l'application ce ferme. mais si ils sont trouvés l'application continue de démarrer normalement.
Dans ma classe main, j'ai un module qui vérifie l'existence des fichiers. Pour les trouver, je dois faire appel à System.getProperty("user.dir") afin de savoir avant tous où est mon application. Le problème c'est que System.getProperty("user.dir") me retourne une valeur NULL. Il est alors impossible pour moi de savoir où est mon application et par conséquence de vérifier l'existence de mes fichiers.
Que dois-je faire afin de savoir où ce situe mon application avant de charger les fenêtres?
Merci d'avance.
|
|
jeudi 22 mai 2008 à 18:28:26 |
Re : System.getProperty("user.dir") = NULL

verdy_p
|
La lecture des propriétés de l'instance statique singleton associée à la classe System est une opération privilégiée. Si tu essayes de faire ça dans une applet, il est normal que cela retourne NULL: une applet ne peut accéder à cet objet (sinon violation possible de données privées de l'utilisateur). Dans une applet il faut utiliser autre chose que le dossier "user.dir" pour stocker des fichiers de données: ces données appartiennent à la session en cours ou au site distant qui émet l'applet. Ce qui est manipulé n'est pas un "utilisateur" mais une "identité". Seul l'utilisateur lui-même peut accepter de transférer des données privées vers une de ses identités en ligne. La solution pour une application: utiliser Java Webstart afin de permettre de configurer un espace de stockage propre à l'application à une identité. Les fichiers propre à un de tes utilisateurs seront stockés sur le PC de l'utilisateur dans un répertoire spécifique à ton application, sans posibilité de savoir ce qu'il y a autour. C'est l'utilisateur lui-même qui gère cet espace de stockage en acceptatn d'installer l'applciation et lui donner de l'espace de travail et de stockage. Sinon il faudra passer par une installation classique d'application locale, et faire démarrer ton application par une instanciation locale de la VM (dans un raccourci du bureau par exemple) spécifiquement pour ton application. Ce qui "semble" marcher dans Eclipse est un répertoire "user.dir" qui n'est accessible que parce que Eclipse est démarré dans sa propre VM depuis un contexte ayant accès aux dossiers locaux de l'utilisateur. Il me semble que ton problème est là : tu as effectivement ignoré ou oublié l'isolation des profils et données associées par les mécanismes de sécurité de Java, ou du navigateur hôte de la VM qui l'a configurée avec une isolation maximale. Dans une applet classique, le seul accès qu'offre la VM pour permettre à une application d'accéder à des fichiers locaux est d'utiliser le sélecteur de fichiers standard (qui nécessite une action intentionelle et explicite de l'utilisateur, pour qu'il retourne un objet "File" donnant accès au contenu d'un fichier local... et encore il y a des restrictions: globalement cela permet tout juste de faire des transferts de fichiers mais pas de travailler dessus). Il faudrait que tu sois un peu plus explicite sur la méthode de déploiement utilisée pour ton application car tout est là, il me semble.
|
|
jeudi 22 mai 2008 à 19:38:39 |
Re : System.getProperty("user.dir") = NULL

metalkev64
|
Merci pour les explications très instructives.
J'ai trouvé la solution à mon problème. J'ignore le pourquoi, mais il semble que si je place System.getProperty("user.dir") avant la déclaration de ma fenêtres, cela fonctionne.
|
|
jeudi 22 mai 2008 à 20:42:50 |
Re : System.getProperty("user.dir") = NULL

verdy_p
|
Attention quand même si cela fonctionne: est-ce que le chemin obtenu est relatif ou absolu? quel peut être l'influence des autres aPI que tu utilises et qui peuvent modifier ou initialiser l'environnement nécessaire. Dificile à dire d'après ce que tu as indiqué ici. Une simple "déclaration de fenêtres" n'explique pas pourquoi "ça marche", mais le comportement de certains évènements générés par les fenêtres peut expliquer les choses. Comme on ne sait pas dans quoi tu déploies ton appli (serveur JSP, exécution purement locale par java.exe ou java web start, ou par un raccourci vers un fichier de commande qui prépare l'environnement nécessaire avant de créer la VM...) on ne pourra pas savoir ce qui se passe chez toi réellement.
|
|
vendredi 23 mai 2008 à 15:52:46 |
Re : System.getProperty("user.dir") = NULL

metalkev64
|
Effectivement je pourrai pas savoir le pourquoi si je ne donne pas de détail, désolé.
Mon application est une application purement local, un jar exécutable.
voiçi le code qui ne fonctionnait pas :
public static void main(String[] args) {
frmPrincipal FrmPrincipal; //Fenêtre principal de l'application
FrmPrincipal = new frmPrincipal();
Properties prop = System.getProperties();
String Location = System.getProperty("user.dir"); //Retourne NULL
GestionArgument(args, Location);
FrmPrincipal.setVisible(true);
}
et voici le code qui fonctionne :
public static void main(String[] args) {
Properties prop = System.getProperties();
String Location = System.getProperty("user.dir"); //Retourne le chemin absolue
GestionArgument(args, Location);
frmPrincipal FrmPrincipal; //Fenêtre principal de l'application
FrmPrincipal = new frmPrincipal();
FrmPrincipal.setVisible(true);
}
La seule différence entre les deux codes est l'emplacement de ma déclaration de fenêtre.
|
|
vendredi 23 mai 2008 à 18:49:07 |
Re : System.getProperty("user.dir") = NULL

verdy_p
|
Demande toi alors pourquoi l'appel de ***ton*** constructeur de fenêtre "new frmPrincipal()" modifie les propriétés système. Il y a fort à parier que c'est ***ton*** constructeur qui provoque ça en purgeant ou réinitialisant complètement ou filtrant ces propriétés -- qui ne disparaissent pas toutes seules par magie. Encore une fois, impossible de savoir ce que fait ***ton*** constructeur, et la chaine d'évènements qui peut être déclenchée, d'autant que les composants de fenêtre peuvent avori de très nombreuses interactions et employer des tas de librairies diverses. Note: ton code utilises System.getProperties pour obtenir une référence à la collections complète de propriétés; si tu peux le faire, ton constructeur de fenêtre peut le faire aussi; comme le résultat est une référence directe à l'objet Properties singleton instancé par la classe System, rien n'interdit ensuite de modifier le contenu de cette collection ainsi facilement référencée, ce que visiblement ton constructeur de fenêtre (et les méthodes qu'il emploie ou déclenche indirectement) ne se prive pas. Le code: Properties props = System.getProperties(); String Location = System.getProperty("user.dir"); //Retourne le chemin absolu est aussi équivalent à: Properties props = System.getProperties(); String Location = props.getProperty("user.dir"); //Retourne le chemin absolu Visiblement ton constructeur de fenêtre semble effectuer en interne (ou dans une des méthodes employées): Properties props = System.getProperties(); props.setProperty("user.dir", null); // ou pire encore: props.clear(); Peut-être qu'il modifie une collection qu'il n'était pas sensée modifier. S'il y a bogue quelque part c'est dans ***ton*** code.
|
|
Cette discussion est classée dans : application, system, user, dir, getproperty
Répondre à ce message
Sujets en rapport avec ce message
System.getProperty("user.dir"); refusé hors eclipse [ par omcougar ]
Bonjour, J'utilise la fonction System.getProperty("user.dir"); pour connaitre le repertoire ou se trouvent les fichiers... sous eclipse tout va bien
Sun Java System Application Server Platform Edition [ par stillfelil ]
Bonjour,je suis sous: Sun JavaT System Application Server Platform Edition 8.1 2005Q1et j'ai deployer un composant web (une Jsp), et sa marche tres bi
JTable +Controller [ par adrienr11vdv ]
bonjour à tous,j'ai séparer le JTable et les événements associés à celui ciVoici la classe de création du JTablepublic class Tout extends javax.swing.
Ahthentification application web avec hibernate et myeclipse [ par mennousource ]
Bonjour, avant tout croyez-moi j'ai bien cherché et je n'ai pas trouvé ce que je veux pour ne pas poster une question que s
postgres et eclipse [ par lilington ]
Salut!j'ai vraiment eu du mal a me decider a choisir le theme. car je devrai me positionner dans base de donnee mais voila:Sous eclipse j'arrive a me
Application Monitoring de Databases [ par ouranos21 ]
Bonjour à tous, J'aimerais réaliser une application de monitoring en java (évidemment). Pour le moment, mon application "tourne". Elle initialise une
jsp et access [ par joualinet12 ]
j'ai une application en jsp servlet java elle est connecté avec une base de donnée access mais pour la test dans le netbeans j'ai pas y arriver veuill
connection BDD [ par jeremeclip ]
Bonjour, voila mon probleme je suis en ce moment meme de cree une application java avec cpnnection a une BDD. pour mes essaie et en ettendant une vrai
Générer des actions en dehors de la fenetre [ par sebvalo ]
Bonjour, Je suis un jeune développeur en java et travail sur Eclipse. Je souhaite créer une application simple qui me permettrait de récupérer par un
vues [ par fodbe ]
bonjour je développe une application qui disposera en temps réel d'un ensemble d'information provenant d'un Portail X développé en j
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|