À la découverte d'Unicode/Propriétés de caractère

Le standard Unicode n'est pas qu'un simple encodage de caractères, mais associe également un ensemble sémantique riche à chaque caractère encodé, propriétés requises pour l'interopérabilité et le comportement correct dans les implémentations, ainsi que pour la conformité Unicode.
Cette sémantique est cataloguée dans la base de données de caractères Unicode (UCD), une collection de fichiers de données qui contiennent les points de code de caractères Unicode et les noms de caractères.
Les fichiers de données définissent les propriétés des caractères Unicode et les mappages entre les caractères Unicode (tels que les mappages de casse).
Les propriétés peuvent être utilisées pour gérer les caractères (points de code) dans les traitement, comme les sauts de ligne, la direction du script de droite à gauche ou l'application de contrôles.
Certaines propriétés de caractère sont également définies pour les points de code auxquels aucun caractère n'est attribué et les points de code qui sont étiquetés comme « non-caractère ».
Les propriétés des caractères sont décrites dans l'annexe 44 du standard.
Les propriétés ont des niveaux de force : normatif, informatif, contributif ou provisoire.
Pour simplifier la spécification, une propriété de caractère peut être attribuée en spécifiant une plage continue de points de code qui ont la même propriété.

Programmation Java Swing/Gestion des actions asynchrones

La création d'une interface graphique pour une application en Java entraîne la création de threads pour gérer les tâches de fond comme la gestion des évènements qui créer une boucle de réception d'évènements et leur distribution aux composants visibles.
Les actions déclenchées par l'utilisateur peuvent prendre beaucoup de temps : recherche de fichiers, calculs complexes, ...
Lorsque de telles actions sont appelées directement depuis les écouteurs d'évènements, l'interface graphique est bloquée durant les secondes ou minutes d'exécution.
Pour éviter ce problème, il faut gérer correctement les appels à ces actions de manière asynchrone.
Action asynchrone.
Pour éviter qu'une action dont l'exécution est longue empêche l'utilisateur d'utiliser l'interface graphique, il faut créer un thread spécifique.
Exemple : Une action longue exécutée par clic sur un bouton :
JButton b_action = new JButton("Démarrer l'action")
b_action.addActionListener(new ActionListener()
La méthode codice_1 crée et démarre un thread pour exécuter l'action et retourne sans attendre la fin d'exécution afin de ne pas bloquer l'interface graphique :
private void demarrerAction()
 new Thread(run_action_longue, "longue-action").start();
// L'action du thread : appeler la méthode actionLongue()
Runnable run_action_longue = new Runnable()
 @Override
 public void run()
private void actionLongue()
 // Ici l'action longue...
 // Pour tester, attendre 10 secondes :
Mise à jour de l'interface.
Une action asynchrone peut avoir besoin de mettre à jour l'interface graphique : indiquer que l'action est terminée, afficher le fichier ou l'image chargée ou le résultat d'un calcul, ...
Pour cela, les méthodes des composants doivent être appelées par le thread de gestion des évènements afin d'éviter les conflits.
Il suffit pour cela d'appeler la méthode statique codice_2 de la classe codice_3.
private void actionLongue()
 // Ici l'action longue...
 // resultat = ...
 // Afficher le résultat :
 SwingUtilities.invokeLater(new Runnable()
 @Override
 public void run()

Fonctionnement d'un ordinateur/Les circuits séquentiels

Fonctionnement d'un ordinateur/Les circuits compteurs et décompteurs