Maison > Java > javaDidacticiel > Pourquoi mon application Java est-elle en retard ou plante-t-elle après avoir utilisé OSXAdapter pour les suppressions de fichiers ?

Pourquoi mon application Java est-elle en retard ou plante-t-elle après avoir utilisé OSXAdapter pour les suppressions de fichiers ?

Mary-Kate Olsen
Libérer: 2024-11-26 20:14:10
original
676 Les gens l'ont consulté

Why Does My Java App Lag or Crash After Using OSXAdapter for File Drops?

JAR Bundler utilisant OSXAdapter entraîne un retard ou une fermeture de l'application

Dans le scénario décrit, une application Java rencontre des problèmes de performances et un comportement anormal après avoir incorporé la bibliothèque OSXAdapter pour gérer les fichiers. supprimer des événements sur macOS. Le problème provient probablement du blocage du thread de répartition d'événements (EDT) lors de l'exécution de tâches fastidieuses.

Pour résoudre ce problème, l'application doit être modifiée pour effectuer ces tâches sur un thread distinct lors de la mise à jour du modèle sur l'EDT. . SwingWorker, avec sa méthode process(), propose un mécanisme adapté pour cela. Alternativement, invoqueLater() peut être utilisé comme illustré dans le code fourni.

Threading incorrect

  1. Approche incorrecte :

    • La classe Controller dort (bloque l'EDT) pendant 10 secondes.
  2. Approche recommandée :

    • Effectuez des tâches fastidieuses dans un fil de discussion séparé et mettez à jour l'interface graphique sur le EDT utilisant SwingWorker ou EnsureLater().

Exemple Implémentation de SwingWorker

public class Controller extends SwingWorker{

    public Controller() {
        execute(); // Starts the SwingWorker thread
    }

    @Override
    // Perform the time-consuming tasks (i.e., adding rows to the table) in a background thread.
    protected Void doInBackground() {
        // ....
        return null;
    }

    @Override
    // Update the GUI on the EDT after the background task is complete.
    protected void done() {
        // ....
    }
}
Copier après la connexion

Considérations supplémentaires

  • Assurez-vous que la méthode isDispatchThread() est invoquée dans le contrôleur pour vérifier si l'EDT est bloqué.
  • Référez-vous au projet GitHub fourni pour l'architecture MVC et la création de bundles d'applications Mac OS sans JAR Bundler.
  • Explorez la technique de défilement automatique JTable présentée dans l'exemple.
  • Étudiez les approches alternatives suggérées dans le lien fourni.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal