Maison  >  Article  >  Java  >  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
Mary-Kate Olsenoriginal
2024-11-26 20:14:10659parcourir

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() {
        // ....
    }
}

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!

Déclaration:
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