Je travaille sur un projet Java avec mon équipe au travail. Pour résumer, nous avons une classe principale qui a une méthode qui instancie et appelle une classe "Save". Cette classe "Save" enregistre les fichiers sur un serveur avec un couple de constructeurs et une poignée de méthodes visibles et non visibles. La classe est gourmande en temps CPU et empêche l'application principale d'afficher une fenêtre de dialogue de barre de progression indiquant à l'utilisateur le statut de la sauvegarde. Ils m'ont demandé de modifier la classe "Save" afin qu'elle apparaisse sur son propre thread afin que le reste de l'application principale puisse faire les petites tâches d'affichage des informations à l'utilisateur.Aide à l'implémentation de Runnable en Java
Voici un concept général de celui-ci:
class MainApp{
...
private void doSave()
{
Save s = new Save();
StatusWindow sw = new StatusWindow();
if save_this
s.saveThis(sw);
if save_that
s.saveThat(sw);
...
}
...
}
class Save{
...
public void saveThis(StatusWindow s)
{
//alot of code
s.update;
}
public void saveThat(StatusWindow s)
{
//alot of code
s.update;
}
... // some non-visible methods, even more code
}
Je suis novice suis actuellement avec des fils en Java, mais j'ai une compréhension de base de la façon dont ils travaillent. D'après ce que je comprends, une classe qui implémente Runnable, quand elle est instanciée comme un nouveau thread, la méthode run() est exécutée. Le problème est, puisqu'il existe différentes méthodes pour différents types d'enregistrement pour différents types de fichiers, comment puis-je implémenter ces méthodes dans la méthode run()? La méthode run() est-elle la seule méthode qui est exécutée lorsque la classe est instanciée dans un nouveau thread et que .start() est appelée?
Quelle serait une bonne solution à ce problème? La classe "Save" aurait-elle besoin d'être repensée pour l'implémenter avec Runnable?
Si plus de détails sont nécessaires, s'il vous plaît faites le moi savoir. Merci pour tout aperçu!
Mise à jour: Merci à tous pour votre aide! Ces solutions seront utiles pour l'avenir.
Oui je suis totalement oublié d'ajouter .start() là-dedans, je vais modifier ma question. Thanx :) –
J'aime la deuxième suggestion, il semble rapide et facile à mettre en œuvre pour l'instant –