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

Java Discussion :

Fonctionnement incompréhensible d'un programme


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Par défaut Fonctionnement incompréhensible d'un programme
    Bonsoir

    Je suis actuellement en train de developper une petite appli ( sous eclispse ), et j'ai bidouiller un petit programme qui me permettra de faire la mise a jour de l'appli, dans le principe, je voudrais avoir un dossier sur le pc ( Document, Bureau ... peut importe ) dans lequel je met mon fichier.java et lorsque l'application est lancer , il verifie s'il ya un fichier dans ce repertoire et le copie pour l'integrer au projet, jusque la mon programme fonctionne a merveille, le probleme vient apres car le projet a le nouveau fichier, ou alors la nouvelle version d'un fichier qui etatit deja present, mais lorsde la compilation, le fichier n'est pas pris en compte, bisarrement sur eclipse je suis obliger d'ouvrir le fichier au moins 1 fois avant de relancer la compilation pour que cela fonctionne, donc du coup je ne peux pas mettre mon appli a jour comme je l'esperait .
    Donc j'aimerais savoir si l'un de vous aurait une idee de la raison de ce comportement

    PS: mon code pour la mise a jour si besoin

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
     
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
     
    public class VerificationMAJ {
     
    	public static File majAppli = new File(
    			"C:/Users/user/Documents/Otaku No Shinbun/MAJ");
    	public static File dossier = new File("src");
    	static int ref = 0;
     
    	public void miseAJour() {
     
    		if (majAppli.exists() == false)
    			majAppli.mkdirs();
     
    		listeRepertoire(majAppli, dossier);
    	}
     
    	/***************
             * Appel de la fonction avec les 2 repertoires sur lesquels on va travailler
             *******************/
    	private static void listeRepertoire(File rep1, File rep2) {
     
    		if (rep1.isDirectory()) {
     
    			File[] list = rep1.listFiles(); // on liste liste les fichiers du
    											// repertoire
    			File[] list2 = rep2.listFiles();
     
    			if (list != null && list.length != 0) { // test si le repertoire est
    													// vide
     
    				for (int i = 0; i < list.length; i++) {
     
    					if (recherche(list[i], list2)) { // recupération du retour
    														// de la fonction
    														// recherche
     
    						for (int j = 0; j < list2.length; j++) {
     
    							/****
                                                             * test si le nom du fichier dans le dossier 1
                                                             * correspond à un nom de fichier dans le dossier 2
                                                             ****/
    							if (list[i].getName().equals(list2[j].getName())) {
    								/*
    								 * Correspondance des fichiers positive
    								 * 
    								 * System.out.println(list[i].getName() + " = "
    								 * + list2[j].getName());
    								 */
    								comparaison(list[i], list2[j]);
    								switch (ref) {
    								case 1:
    									File fichCop = new File("src/"
    											+ list[i].getName());
    									list2[j].delete(); // suppression du dichier
    									if (copyFile(list[i], fichCop)) {
    										/*Copie effectuer
    										 * 
    										 * System.out.println("copie de " +
    										 * list[i].getName() + " effectuer");
    										 */
    									} else {
    										/* Copie echouer
    										 * System.out.println("copie de " +
    										 * list[i].getName() + " echouer");
    										 */
    									}
    									list[i].delete();
    									break;
    								case 2:
    									/*Suppression du fichier copier dans le dossier MAJ
    									 * 
    									 * System.out.println("fichier a supprimer : "
    									 * + list[i]);
    									 */
    									list[i].delete();
    									break;
    								case 3:
    									/*
    									 * System.out.println("fichier a supprimer : "
    									 * + list[i]);
    									 */
    									list[i].delete();
    									break;
     
    								default:
    									break;
    								}
    							} else {
    								/* fichier non correspondant */
    							}
    						}
     
    					} else {
    						/* le fichier n'es pas compris dans le tableau */
    						File fichCop = new File("src/" + list[i].getName());
     
    						if (copyFile(list[i], fichCop)) {
    							/*
    							 * copie du fichier effectuer avec succes 
    							 * 
    							 * System.out.println("copie de " +
    							 * list[i].getName()+ " effectuer");
    							 */
    						} else {
    							/*Copie du fichier
    							 *
    							 * System.out.println("copie de " + list[i] +
    							 * " vers " + fichCop);
    							 */
    						}
    						list[i].delete();
    						new Main();
    					}
     
    				}
    			} else if (list.length == 0) { // si le fichier est vide ...
    				// Dossier vide 
    			} else { // en cas d'erreur
    				/* Erreur de lecture 
    				 *  System.err.println(rep1 + " : Erreur de lecture."); */
    				new VerificationMAJ();
    			}
     
    			/***************
                             * Appel récursif sur les sous-répertoires *********** if (list !=
                             * null) { for (int i = 0; i < list.length; i++) {
                             * 
                             * listeRepertoire(list[i]); } } else {
                             * System.err.println(repertoire + " : Erreur de lecture."); }
                             */
    		}
    	}
     
    	/*
    	 * methode renvoyant vrai si le fichier passer enparametre "valeurATrouver"
    	 * est dans la table "T" *****
    	 */
    	private static boolean recherche(File valeurATrouver, File[] T) {
    		for (int i = 0; i < T.length; i++) {
    			if (T[i].getName().equals(valeurATrouver.getName())) {
    				return true;
    			}
    		}
    		return false;
    	}
     
    	/***
             * Comparaison entre les 2 fichiers pour savoir lequel a la date de
             * modification la plus récente
             ***/
    	private static void comparaison(File rep1, File rep2) {
    		long dateMod1 = rep1.lastModified();
    		long dateMod2 = rep2.lastModified();
     
    		if (dateMod1 > dateMod2) {
    			// System.out.println(rep1 + " : MAJ est plus récent ");
    			ref = 1;
     
    		} else if (dateMod1 < dateMod2) {
    			// System.out.println(rep2 + " est plus récent ");
    			ref = 2;
    		} else if (dateMod1 == dateMod2) {
    			// System.out.println(" Modifiés le meme jour ");
    			ref = 3;
    		}
     
    	}
     
    	/**
             * copie le fichier source dans le fichier destination, retourne vrai si
             * cela réussit
             */
    	private static boolean copyFile(File source, File dest) {
    		try {
    			// Declaration et ouverture des flux
    			java.io.FileInputStream sourceFile = new java.io.FileInputStream(
    					source);
     
    			try {
    				java.io.FileOutputStream destinationFile = null;
     
    				try {
    					destinationFile = new FileOutputStream(dest);
     
    					// Lecture par segment de 0.5Mo
    					byte buffer[] = new byte[512 * 1024];
    					int nbLecture;
     
    					while ((nbLecture = sourceFile.read(buffer)) != -1) {
    						destinationFile.write(buffer, 0, nbLecture);
    					}
    				} finally {
    					destinationFile.close();
    				}
    			} finally {
    				sourceFile.close();
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    			return false; // Erreur
    		}
     
    		return true; // Résultat OK
    	}
     
    }
    Merci d'avance pour l'aide et les suggestion qui seront apporter

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    1. Si tu modifies des fichiers situés dans le workspace d'Eclipse sans avertir Eclipse, il ne le saura pas (et comme il gère un cache, il ne recompilera pas un ;java qu'il a déjà compilé). Pour avertir Eclipse, en manuel, on utilise le menu Refresh. En mode programmatique, c'est une autre histoire, parce que tu devras faire un plugin pour ça (ce n'est pas très complexe, mais je ne pense pas que tu en sois arrivé à ce niveau)
    2. Ensuite, celà dit, une application Java exécutable est compilée : soit il s'agit de .class, soit de .jar. Elle s'exécute en dehors de Eclipse et c'est cette application pour laquelle les mises à jour sont à faire. Pas dans les sources (on peut faire ce genre de chose, dans le cadre de travail à plusieurs, en utilisant CVS, ou SubVersion, ou GIT, etc... mais pas en bricolant un programme. En plus, j'ai peu de comprendre que c'est ton propre programme qui met à jour ses propres .java, ce qui n'a pas de sens (les sources ne sont pas forcément distribués, ou s'ils le sont, ils seront plutôt encapsulés dans un .jar (donc non modifiables), et même si tu diffuses ton application sous forme d'arborescence de .java et de .class (accompagné d'un Eclipse en plus !), donc diffuser les sources, il va falloir compiler à chaque mise à jour. Ce n'est vraiment pas la bonne manière de procéder.
    3. Accessoirement Java fournit un système facilitant la mise à jour d'application : Java Web Start.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2015
    Messages : 4
    Par défaut
    Si tu veux faire un système de maj tu doit pouvoir faire en sorte d'avoir deux .jar, un "programme" et un "launcher", en gros pour lancer ton programme tu lance le launcher, il chercher la mise a jour et si elle existe, il la télécharge et la met dans le .jar "programme" puis il lance le .jar programme.
    Pour maj il faudrait retélécharger le .jar "programme" en entier, dans ce cas il faut que tes fichier de sauvegarde (si tu en as) soient hors des .jar.

    En espérant t'avoir aidé.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Par défaut
    Citation Envoyé par frayien Voir le message
    Si tu veux faire un système de maj tu doit pouvoir faire en sorte d'avoir deux .jar, un "programme" et un "launcher", en gros pour lancer ton programme tu lance le launcher, il chercher la mise a jour et si elle existe, il la télécharge et la met dans le .jar "programme" puis il lance le .jar programme.
    Pour maj il faudrait retélécharger le .jar "programme" en entier, dans ce cas il faut que tes fichier de sauvegarde (si tu en as) soient hors des .jar.

    En espérant t'avoir aidé.
    Merci, c'est la solution la plus simple que j'ai trouver et que j'ai utiliser

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pourquoi linux fonctionne même avec un programme qui fait une boucle while(1) ?
    Par morpheusmg dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 23/12/2011, 17h49
  2. Réponses: 2
    Dernier message: 14/04/2010, 15h23
  3. [PHPUnit] Fonctionnement incompréhension
    Par Thinia dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 23/03/2010, 12h14
  4. [AC-2007] Fonctionnement incompréhensible dans VBA ACCESS
    Par fbourdon dans le forum IHM
    Réponses: 6
    Dernier message: 27/11/2009, 17h15
  5. Réponses: 0
    Dernier message: 08/06/2009, 17h05

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