


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!

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.

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.

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.

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

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.

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.

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

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.


Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

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
L'éditeur open source le plus populaire

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
Le dernier (2018.2.1) outil de développement intégré PHP professionnel

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
