jan
22
2008
Dans le cadre d’un mini-projet, nous avons choisi de mettre en place un réseau Peer-to-Peer centralisé. Ce réseau est donc composé d’un serveur et de clients devant s’y connecter lors de la recherche de fichiers. Ce réseau est implémenté en RMI afin de faciliter les communications entre les différents éléments. Les principes de transfert de données basiques tels que l’utilisation de sockets sont ainsi masqués.
Notre implémentation permet :
-
La recherche de fichier selon un mot clé,
-
Le téléchargement d’un fichier depuis plusieurs sources simultanément,
-
Le téléchargement de plusieurs fichiers simultanément,
-
La reprise du téléchargement d’un fichier partiellement téléchargé,
-
La déconnexion « sauvage » des clients.
Néanmoins, il n’est pas possible :
-
De partager des parties de fichier non complet (un fichier en cours de téléchargement ne peut être téléchargé par d’autres peers simultanément),
-
De contrôler les vitesses d’émission et de réception.
Nous pouvons néanmoins ajouter que l’architecture de notre application ne poserait aucun problème à qui voudrait implémenter ces fonctionnalités.


Le client (jar executable, incluant jdom et fast md5)
Le serveur (jar executable)
Les sources du client et du serveur (incluant jdom et fast md5)
Le rapport
jan
02
2008
Quel développeur n’utilise pas « e.printStrackTrace()» ou « System.out.println(e)» ? Ceci est très pratique, voir indispensable lors de l’écriture d’un programme. Mais que devient le sort de ces instructions lors de l’utilisation de l’application une fois finie ? Au mieux, quelques lignes incompréhensibles par l’utilisateur si l’application a été lancée dans un terminal, sinon rien. Au final, un cas non prévu par le développeur qui peut entrainer un bug.
Un solution consiste à afficher l’erreur dans une fenêtre plutôt que dans la console. Pour ce faire, j’ai écrit une méthode permettant d’afficher une exception et son détail dans un JOptionPane et de laisser le choix à l’utilisateur de continuer ou d’interrompre l’exécution du programme.
Voici le code source permettant d’afficher l’exception :
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
*
* @author Romain Bouleis
*
*/
public class Tools {
public static void showError(Exception e) {
//stock la trace d'execution dans une String
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
//cree un JTextArea pour afficher le contenu de l'exception
JTextArea textArea = new JTextArea(sw.toString(),20,40);
textArea.setEditable(false);
textArea.setBorder(BorderFactory.createTitledBorder("Détails de l'exception"));
final JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setVisible(false);
//boutton details
JButton details = new JButton("Détails...");
details.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
scrollPane.setVisible(!scrollPane.isVisible());
JDialog dialog = (JDialog) ((JComponent) e.getSource()).getRootPane().getParent();
dialog.pack();
}
});
//boutton continuer
JButton ok = new JButton("Continuer");
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JDialog dialog = (JDialog) ((JComponent) e.getSource()).getRootPane().getParent();
dialog.dispose();
}
});
//boutton exit
JButton cancel = new JButton("Arrêter");
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
//placement des composants
JPanel buttonsPanel = new JPanel(new FlowLayout());
buttonsPanel.add(ok);
buttonsPanel.add(cancel);
buttonsPanel.add(details);
JPanel mainPanel = new JPanel(new BorderLayout());
mainPanel.add(scrollPane, BorderLayout.CENTER);
mainPanel.add(buttonsPanel,BorderLayout.SOUTH);
//affichage du message
JOptionPane.showOptionDialog(null, e.getMessage(), "Erreur", JOptionPane.OK_OPTION, JOptionPane.ERROR_MESSAGE, null, new Object[]{mainPanel}, ok);
}
public static void main(String[] args) {
Tools.showError(new Exception("Une erreur !"));
}
}
Désormais, vos « try-catch» ressembleront plutôt à ceci :
try {
int error = 69/0;
} catch (Exception e) {
Tools.showError(e);
}