Bonjour,
J'ai effectivement un problème avec un JTree. Lorsque je tourne sous Eclipse tout fonctionne mais dès que je fait un "jar" cela ne marche plus.
Je m'explique, J'ai créé un JTree qui affiche un répertoire, ses sous-répertoires et ses fichiers.
L'affichage sous Eclipse est correct et je peux "ouvrir'" les sous-répertoires ,ensuite sélectionner un fichier et appliquer un traitement à ce dernier. Donc tout est OK de ce coté.
Je fais un fichier "jar" et je lance l'application. A la demande d'affichage du JTree celui-ci affiche le répertoire et ses sous-répertoires. Mais, il y a un mais, je ne peux plus sélectionner un sous-répertoire et encore moins l'ouvrir. En plus, et c'est pas rien, l'application ne fonctionne plus et je suis forcé d'actionner un "fin de tâche" pour m'en sortir.
Ainsi, il semble que l'application trouve bien le répertoire et ses sous-répertoires mais que par contre l'écouteur "TreeSelectionListener" ne fonctionne plus dans ce cas... Voici le code utilisé.(l'application appelle la méthode "Eff(...)")
Quelqu'un a-t-il une idée?

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
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.File;
import java.util.ArrayList;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
 
import java.lang.String;
 
public class EffFchGrl extends JPanel
 { 
  public EffFchGrl(File dir)
   { 
    setLayout(new BorderLayout());
 
    // Création de l'arborescence
 
    JTree tree = new JTree(addNodes(null, dir));    
 
    // Mise à l'écoute d'un événement dans l'arborescence      
    tree.addTreeSelectionListener(new TreeSelectionListener()
     {
      public void valueChanged(TreeSelectionEvent e)
       {    	  
        // Définition du noeud où s'est passé l'événement 
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.getPath().getLastPathComponent();
 
        // Si le compte de feuille est 1, le noeud correspond à une feuille donc à un fichier...
        if(node.getLeafCount() == 1)
         {
           // Exécution du traitement de ce fichier...
         }
       }     
     });
 
    // Ajout d'un éventuel ascenceur    
    JScrollPane scrollpane = new JScrollPane();
 
    // Ajustage du contenu de l'arbre
    scrollpane.getViewport().add(tree);
 
    // Centrage du tout
    add(BorderLayout.CENTER, scrollpane);
   }  
  DefaultMutableTreeNode addNodes(DefaultMutableTreeNode curTop, File dir)
   {	  
    String curPath = dir.getPath();
    DefaultMutableTreeNode curDir = new DefaultMutableTreeNode(curPath);
    if (curTop != null)
     {
      curTop.add(curDir);
     }
    // Ecriture dans l'ArrayList" de tous les noeuds rencontrés dossiers par dossiers   
    ArrayList ol = new ArrayList();
    String[] tmp = dir.list(); 
    for (int i = 0; i < tmp.length; i++)
     {
      ol.add(tmp[i]);
     }
    File f;
    ArrayList files = new ArrayList();
    for (int i = 0; i < ol.size(); i++)
     {
      String thisObject = (String) ol.get(i);
      String newPath;
      if (curPath.equals(File.separator + "StockGrilles"))    	  
       { 
        newPath = thisObject;
       }
      else
       {
        newPath = curPath + File.separator + thisObject;      
       }
      if ((f = new File(newPath)).isDirectory())
       {
        addNodes(curDir, f);
       }
      else
       {
        files.add(thisObject);
       }
     }
    for (int fnum = 0; fnum < files.size(); fnum++)
     {
      curDir.add(new DefaultMutableTreeNode(files.get(fnum)));
     }    
    return curDir;
   }  
  public Dimension getMinimumSize()
   {
    return new Dimension(310, 280);
   }  
  public Dimension getPreferredSize()
   {
	return new Dimension(310, 280);
   } 
 
  public int ChxEffFchGrl()
   {
	return Cadre.indEffFchGrl;
   }
 
  public int Eff(int ind)
   {
    frame = new JFrame("EffFchGrl");
    frame.setTitle(" --- SDK --- EFFACER une GRILLE --- ");
    frame.setResizable(false);
    Toolkit tk = Toolkit.getDefaultToolkit();  
    Dimension dimEcr = tk.getScreenSize();
    int lrgEcr = dimEcr.width;
    int hauEcr = dimEcr.height;
    int lrgFen = 310 + 6;
    int hauFen = 280 + 26;
    int decHrz = (lrgEcr - lrgFen) / 2;
    int decVrt = (hauEcr - hauFen) / 2;
   frame.setBounds(decHrz, decVrt, lrgFen, hauFen);
 
    // DISPOSE_ON_CLOSE efface JFrame
 
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setAlwaysOnTop(true);    
    Container cp = frame.getContentPane(); 
    cp.add(new EffFchGrl(new File("StockGrilles")));
//  cp.add(new EffFchGrl(new File("." + File.separator + "StockGrilles"))); 
    frame.pack();
    frame.setVisible(true);
    return Cadre.indEffFchGrl;
   }
  final static int SORTIR       = 6,
                   NON_AUTORISE = 7,
                   AUTORISE     = 8,
                   CONFIRME     = 9;                
  public static String nomFchEff;
  public static JFrame frame;
 }