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

JavaFX Discussion :

[Langage] Récupérer une image modifée pendant le Run


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    yann.lobjois0922
    Invité(e)
    Par défaut [Langage] Récupérer une image modifée pendant le Run
    Bonsoir,

    Je souhaite modifier des images dans la visionneuse de javafx-samples-2.2.51 Ensemble -> DisplayShelfSample

    Les images sont bien modifiées (dans le package), mêmes noms, nouvelles références d'objets mais les images affichées ne changent pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       private ObservableList<Image> images = FXCollections.<Image>observableArrayList();
    ...
      for... images.set(i, new Image(MaClasse.class.getResource("/com/images/" + i + ".png").toExternalForm(), false));
            items[i] = new PerspectiveImage(images.get(i));
                item = items[i];
    Dernière modification par bouye ; 04/12/2014 à 00h47. Motif: Suppression du formattage

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Comment tu lances l'application ? Depuis le JAR ou tu recompiles depuis un IDE ?
    Le code charge les images depuis le fichier JAR en utilisant le mécanisme des ressources donc si les images d'origine sont toujours dedans, les tiennes ne sont pas chargées même si elles sont dans une arborescence similaire sur le disque.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    yann.lobjois0922
    Invité(e)
    Par défaut
    Merci de ta réponse Fabrice.
    Je modifie les images originales :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dessin dessin = new Dessin("src/com/images/" + i + ".png");
    Dans le Run de mon appli je vois la progression qui écrase les images et avec Netbeans l'aperçu des png modifiées.
    Le jar lui ne charge apparemment les images qu'au démarrage..
    Dernière modification par bouye ; 04/12/2014 à 00h53. Motif: Suppression du formattage

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Oui mais ca ne m'indique pas comment est fichue l'arborescence de ton projet (un petit screen de ton netbeans avec l'arborescence qui montre les fichiers java et png ?), ni si tu as bien fait un clean de ton projet avant de le lancer, ni si tu n'as pas dans ton projet un repertoire quelques part qui part hasard contiendrai encore les anciennes images... ni si ton JAR contient les bonnes images (tu peux explorer le contenu de ton JAR avec n'importe quel soft de manipulation de fichiers ZIP)

    PS : ça va vite devenir super-lourdingue, si je dois constamment aller éditer tes messages pour supprimer le centrage !
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Ok, donc oui si tu modifies les images en cours de route alors qu'elles ne sont chargées qu'une seule fois, il est normal que ce sont encore les anciennes versions qui s'affichent.

    Il te faut te créer un service/une tache qui monitore régulièrement la dernière date de modification des fichiers images et qui les recharge quand ils ont été récemment édités.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Une base de depart en utilisant les watch service sur les fichiers introduits dans le JDK7 :

    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
    public final class FileMonitorTask extends Task<Void> {
     
        private final Duration sleepTime = Duration.seconds(1);
     
        private final Path dir;
        private final List<String> extensions;
     
        public FileMonitorTask(final Path dir, final String... extensions) {
            this.dir = dir;
            this.extensions = Arrays.asList(extensions).stream()
                    .map(extension -> {
                        String regexp = extension.replaceAll("\\.", "\\\\.");
                        regexp = regexp.replaceAll("\\*", ".*");
                        return regexp;
                    })
                    .collect(Collectors.toList());
        }
     
        @Override
        protected Void call() throws Exception {
            final WatchService watcher = FileSystems.getDefault().newWatchService();
            dir.register(watcher,
                    StandardWatchEventKinds.ENTRY_CREATE,
                    StandardWatchEventKinds.ENTRY_DELETE,
                    StandardWatchEventKinds.ENTRY_MODIFY);
            while (!isCancelled()) {
                // Cet appel bloque tant qu'aucune modification n'a eut lieu.
                final WatchKey key = watcher.take();
                final List<Path> files = new ArrayList();
                key.pollEvents().stream().forEach(event -> {
                    final WatchEvent.Kind<?> kind = event.kind();
                    if (!(kind == StandardWatchEventKinds.OVERFLOW)) {
                        final WatchEvent<Path> ev = (WatchEvent<Path>) event;
                        final Path path = ev.context();
                        extensions.stream()
                                .filter(extension -> path.toFile().getName().matches(extension))
                                .forEach(item -> files.add(path));
                    }
                });
                // Mise a jour des modifs.
                Platform.runLater(() -> changedFiles.setAll(files));
                final boolean valid = key.reset();
                if (!valid) {
                    break;
                }
            }
            return null;
        }
     
        private final ObservableList<Path> changedFiles = FXCollections.observableList(new LinkedList());
        private final ObservableList<Path> changedFilesReadOnly = FXCollections.unmodifiableObservableList(changedFiles);
     
        public ObservableList<Path> getChangedFiles() {
            return changedFilesReadOnly;
        }
    }
    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
    final Path dir = new File("C:\\Users\\Fabriceb\\Desktop\\").toPath();
    final FileMonitorTask fileMonitorTask = new FileMonitorTask(dir, "*.png");
    final Service<Void> fileMonitorService = new Service() {
     
        @Override
        protected Task createTask() {
            return fileMonitorTask;
        }
    };
    fileMonitorService.setOnFailed(workerStateEvent -> {
        System.out.println("Service echec.");
        final Throwable exception = fileMonitorService.getException();
        System.out.println(exception);
    });
    fileMonitorService.setOnCancelled(workerStateEvent -> {
        System.out.println("Service annulation.");
    });
    fileMonitorService.setOnSucceeded(workerStateEvent -> {
        System.out.println("Service fin ok.");
    });
    fileMonitorTask.getChangedFiles().addListener((ListChangeListener.Change<? extends Path> change) -> {
        while (change.next()) {
            // Recharger les images qui ont été modifiées ici.
            System.out.println(fileMonitorTask.getChangedFiles());
        }
    });
    fileMonitorService.start();
    System.out.println("Service started.");
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. [Mpeg4] récupérer une image d'un flux MPEG4.
    Par Drizztrobber dans le forum Multimédia
    Réponses: 10
    Dernier message: 19/03/2007, 10h01
  2. Récupérer une image JPEG à partir d'une vidéo
    Par kurul1 dans le forum C++Builder
    Réponses: 8
    Dernier message: 09/08/2006, 10h51
  3. Comment récupérer une image du net ?
    Par Cracking_Cow dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 01/12/2005, 21h53
  4. récupérer une image du presse papier
    Par amelhog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/08/2005, 10h18
  5. [Swing] récupérer une image d'un composant
    Par klemouf dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 16/09/2004, 10h24

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