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
Jframe l'authentification d'application [ par tresbien ]
bonjour, je veux faire s'authentifier mon application par un nom d'utilisateur et mot de passe en java, quelqu'un m'aider à donner le code source qu
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
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc
Forum
RE : CODE GéNéRé RE : CODE GéNéRé par Pylouq
Cliquez pour lire la suite par Pylouq
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|