recherche
MaisonJavajavaDidacticielComment intercepter ArrayIndexOutOfBoundsException lors de l'utilisation d'Executor et SwingWorker pour le multithreading ?

How to Catch ArrayIndexOutOfBoundsException When Using Executor and SwingWorker for Multithreading?

Comment obtenir ArrayIndexOutOfBoundsException lors de l'utilisation d'Executor et SwingWorker pour le multithreading

Question :

J'utilise Executor pour SwingWorker J'ai rencontré un problème avec le multithreading. Si j'accède à un élément du vecteur qui n'existe pas, le code semble ignorer l'élément. Comment obtenir cette exception ?

Réponse :

Relancer l'exception obtenue à partir de Future#get() dans la méthode done() de SwingWorker rend possible l'exception dans la question.

La méthode done() modifiée ressemble à ceci :

@Override
protected void done() {
    try {
        get();
    } catch (InterruptedException | ExecutionException | IllegalStateException e) {
        e.printStackTrace();
    }
}

En interceptant ces exceptions dans la méthode done(), SwingWorker peut les renvoyer pour les utiliser dans l'application Gérer les exceptions.

Exemple de code complet :

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.DateFormat;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import javax.swing.*;
import javax.swing.table.*;

/** @see https://stackoverflow.com/questions/7054627 */
public class TableWithExecutor extends JFrame {

    private static final int delay = 1000;
    private static final DateFormat df = DateFormat.getTimeInstance();
    private String[] columnNames = {"Product", "Availability"};
    private Object[][] data = {columnNames, columnNames, columnNames};
    private DefaultTableModel model;
    private JTable table;
    private Executor executor = Executors.newCachedThreadPool();
    private Timer timer;

    public TableWithExecutor() {
        model = new DefaultTableModel(data, columnNames);
        table = new JTable(model) {

            @Override
            public Class getColumnClass(int column) {
                return getValueAt(0, column).getClass();
            }
        };
        table.setDefaultRenderer(Date.class, new DefaultTableCellRenderer() {

            @Override
            protected void setValue(Object value) {
                setText((value == null) ? "" : df.format(value));
            }
        });
        table.setPreferredScrollableViewportSize(new Dimension(200, 100));
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane, BorderLayout.CENTER);
        timer = new Timer(delay, startCycle());
        timer.setRepeats(true);
        timer.start();
    }

    private Action startCycle() {
        return new AbstractAction(MyTask.STARTSCHEDULE) {

            @Override
            public void actionPerformed(ActionEvent e) {
                executor.execute(new MyTask(MyTask.STARTSCHEDULE));
            }
        };
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                TableWithExecutor frame = new TableWithExecutor();
                frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    private class MyTask extends SwingWorker<list>, DateRecord> {

        private static final String STARTSCHEDULE = "StartSchedule";
        private String name = STARTSCHEDULE;

        MyTask(String name) {
            this.name = name;
            addPropertyChangeListener(new TaskListener(name));
        }

        @Override
        protected List<daterecord> doInBackground() throws Exception {
            for (int row = 0; row  chunks) {
            for (DateRecord dr : chunks) {
                model.setValueAt(dr.date, dr.rowNumber, 1);
            }
        }

        @Override
        protected void done() {
            try {
                get();
            } catch (Exception e) {
                e.printStackTrace(System.err);
            }
        }
    }

    private static class DateRecord {

        private int rowNumber;
        private Date date;

        public DateRecord(int recordNumber, Date date) {
            this.rowNumber = recordNumber;
            this.date = date;
        }
    }

    private static class TaskListener implements PropertyChangeListener {

        private String name;

        TaskListener(String name) {
            this.name = name;
        }

        @Override
        public void propertyChange(PropertyChangeEvent e) {
            System.out.println(name + ": "
                + e.getOldValue() + " -> " + e.getNewValue());
        }
    }
}</daterecord></list>

Le code ci-dessus montre comment utiliser Executor et SwingWorker pour le multithreading et relancer les exceptions dans la méthode done() , interceptez et gérez l'exception ArrayIndexOutOfBoundsException.

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
Comment le JVM contribue-t-il à la capacité de 'écrire une fois, d'exécuter n'importe où' de Java (WORA)?Comment le JVM contribue-t-il à la capacité de 'écrire une fois, d'exécuter n'importe où' de Java (WORA)?May 02, 2025 am 12:25 AM

JVM implémente les fonctionnalités WORA de Java via l'interprétation des bytecodes, les API indépendantes de la plate-forme et le chargement de classe dynamique: 1. ByteCode est interprété comme du code machine pour assurer le fonctionnement de la plate-forme multiplié; 2. Différences de système d'exploitation abstraites API standard; 3. Les classes sont chargées dynamiquement au moment de l'exécution pour assurer la cohérence.

Comment les versions plus récentes de Java abordent-elles les problèmes spécifiques à la plate-forme?Comment les versions plus récentes de Java abordent-elles les problèmes spécifiques à la plate-forme?May 02, 2025 am 12:18 AM

La dernière version de Java résout efficacement les problèmes spécifiques à la plate-forme grâce à l'optimisation JVM, aux améliorations de la bibliothèque standard et à la prise en charge de la bibliothèque tierce. 1) L'optimisation JVM, comme le ZGC de Java11, améliore les performances de la collecte des ordures. 2) Améliorations standard des bibliothèques, telles que le système de module de Java9, réduisant les problèmes liés à la plate-forme. 3) Les bibliothèques tierces fournissent des versions optimisées à plateforme, telles que OpenCV.

Expliquez le processus de vérification bytecode effectué par le JVM.Expliquez le processus de vérification bytecode effectué par le JVM.May 02, 2025 am 12:18 AM

Le processus de vérification Bytecode de JVM comprend quatre étapes de clé: 1) Vérifiez si le format de fichier de classe est conforme aux spécifications, 2) vérifiez la validité et l'exactitude des instructions de bytecode, 3) effectuer une analyse du flux de données pour assurer la sécurité du type et 4) équilibrant la minutie et les performances de la vérification. Grâce à ces étapes, le JVM garantit que seul le bytecode sécurisé est exécuté, protégeant ainsi l'intégrité et la sécurité du programme.

Comment l'indépendance de la plate-forme simplifie-t-elle le déploiement des applications Java?Comment l'indépendance de la plate-forme simplifie-t-elle le déploiement des applications Java?May 02, 2025 am 12:15 AM

Java'splatformIndependenceNallowsApplicationStorunonanyOperatingSystemwithajvm.1) singlecodeBase: writeAndCompileonceForAllPlatFatForms.2) Easyupdates: UpdateByteCodeForsImulTaneousDoyment.4)

Comment l'indépendance de la plate-forme de Java a-t-elle évolué au fil du temps?Comment l'indépendance de la plate-forme de Java a-t-elle évolué au fil du temps?May 02, 2025 am 12:12 AM

L'indépendance de la plate-forme de Java est continuellement améliorée grâce à des technologies telles que JVM, la compilation JIT, la normalisation, les génériques, les expressions Lambda et ProjectPanama. Depuis les années 1990, Java est passé de la JVM de base à la JVM moderne haute performance, garantissant la cohérence et l'efficacité du code sur différentes plates-formes.

Quelles sont les stratégies pour atténuer les problèmes spécifiques à la plate-forme dans les applications Java?Quelles sont les stratégies pour atténuer les problèmes spécifiques à la plate-forme dans les applications Java?May 01, 2025 am 12:20 AM

Comment Java atténue des problèmes spécifiques à la plate-forme? Java implémente la plate-forme indépendante de la plate-forme via JVM et des bibliothèques standard. 1) Utilisez Bytecode et JVM pour abstraction des différences du système d'exploitation; 2) La bibliothèque standard fournit des API multiplateformes, telles que les chemins de fichier de traitement des classes de chemins et le codage des caractères de traitement de la classe Charset; 3) Utilisez des fichiers de configuration et des tests multiplateformes dans les projets réels pour l'optimisation et le débogage.

Quelle est la relation entre l'indépendance de la plate-forme de Java et l'architecture des microservices?Quelle est la relation entre l'indépendance de la plate-forme de Java et l'architecture des microservices?May 01, 2025 am 12:16 AM

Java'splatformIndependanceNhancesMicRoservices ArchitectureByoFerringDeploymentFlexibilité, cohérence, évolutivité, etportabilité.1) DeploymentFlexibilityAllowsMicroserviceStorUnonanyPlatformwithajvm.2) CohérenceaCossserviceSiceSIGLYPLATFORMWithajvm.2)

Comment GraalVM est-il lié aux objectifs d'indépendance de la plate-forme de Java?Comment GraalVM est-il lié aux objectifs d'indépendance de la plate-forme de Java?May 01, 2025 am 12:14 AM

Graalvm améliore l'indépendance de la plate-forme de Java de trois manières: 1. Interopérabilité transversale, permettant à Java d'interopérer de manière transparente avec d'autres langues; 2. 3. Optimisation des performances, le compilateur Graal génère un code machine efficace pour améliorer les performances et la cohérence des programmes Java.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel