Bonjour tout le monde !

Bon alors le fait est que j'ai essayé de comprendre la synchronization via les tutoriels présents sur le site, mais il reste un petit problème pour mon application.

L'application va dans un premier temps télécharger un fichier .xls sur le net et dans un deuxième temps l'ouvrir. Donc il faut que le premier thread soit terminé quand le deuxième commence...

Donc j'ai essayé de mettre des synchronized, des wait() et des notify(), mais il reste toujours un problème.

En effet, le thread qui télécharge le fichier utilise une classe à part qui affiche une barre de progression pour voir le temps que çà prend. Et le problème est que lorsque les threads sont synchronizés (de la mauvaise manière je pense), la barre de progression ne s'affiche plus et çà bloque la fenêtre. Alors que quand ils ne sont pas synchronizés, elle s'affiche et se rempli nickel.

Je mets le code simplifié de l'application qui lance les 2 threads:
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
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import jxl.*;
 
public class GetFile extends JFrame {
 
	public GetFile() {
		setSize(100, 100);
		Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
		setLocation((screen.width - this.getSize().width)/2,
		 (screen.height - this.getSize().height)/2);
		setContentPane(getJDesktopPane());
		setVisible(true);
	}
 
	private JDesktopPane getJDesktopPane() {
		JDesktopPane jdp = new JDesktopPane();
		JPanel jp = new JPanel();
		jp.setSize(100, 100);
		jp.setLocation(new java.awt.Point(1,1));
 
		JButton jb = new JButton("Go !");
 
		jp.add(jb, BorderLayout.CENTER);
 
		jb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				go1();
				go2();
			}
		});
 
		jdp.add(jp);
		jdp.setVisible(true);
		jdp.updateUI();
 
		return jdp;
	}
 
	synchronized private void go1() {
		HTTPGetFile gf = new HTTPGetFile("http://otarie10.free.fr/datas.xls");
		notify();
	}
 
	synchronized private void go2() {
		try {
			wait();
			Workbook workbook = Workbook.getWorkbook(new File("datas.xls"));
			Sheet sheet = workbook.getSheet(0);
 
			workbook.close();
		} catch (Exception e) {
			System.out.println("Impossible d'ouvrir le fichier .xls");
			System.out.println(e);
		}
	}
 
	public static void main(String[] args) throws IOException {
		JFrame.setDefaultLookAndFeelDecorated(true);
		new GetFile();
	}
}
La classe HTTPGetFile (récupérée sur un autre site) sert à télécharger le fichier passé en paramètre et à afficher la barre de progression.

Voilà, je pense que çà vient du fait que je n'ai rien compris à la synchronization, mais si quelqu'un pouvait m'éclairer ce serait sympa...

Merci d'avance !!!