[JAVA] Problèmes et solutions pour l'effondrement de l'interface utilisateur lors de l'entrée en japonais en swing

introduction

Bugs liés au swing ces jours-ci? J'en souffrais.

1.png

Par exemple, supposons que vous prépariez des composants JTextComponent tels que JTextField et JTextArea comme ceci. Il n'y a pas de différence particulière dans la quantité de caractères alphanumériques demi-largeur saisis, mais dès que je suis entré en japonais,

2.png $ \ Huge {na-n-na-n-su-ka-ko-re} $ </ font>

Il y a aussi quelques bugs.

Quand j'ai cherché sur Google, j'ai trouvé une solution qui me permettait de continuer à appuyer sur repaint () sur la fenêtre en utilisant ʻInputMethodListener, donc même si je ne minimisais pas le cadre, j'ai trouvé la solution après avoir entré des caractères pleine largeur dans le composant, puis while. Préparé une classe de correction de bogue pour continuer à frapper repaint ()` du cadre avec.

Classe de correction de bogue

python


final class SwingPaintBugFix extends Thread {
    private Window w;
    private boolean running = true;

    private static SwingPaintBugFix bugfix = new SwingPaintBugFix();

    private SwingPaintBugFix() {}

    private SwingPaintBugFix(Window w) {
        this.w = w;
    }

    public static void of(JTextComponent txtComp, Window w) {
        w.addWindowListener(new WindowAdapter() {
            @Override public void windowIconified(WindowEvent e) {
                bugfix.stopRunning();
            }
            @Override public void windowDeiconified(WindowEvent e) {
                bugfix = new SwingPaintBugFix(w);
                bugfix.start();
            }
        });
        txtComp.addInputMethodListener(new InputMethodListener() {
            @Override public void inputMethodTextChanged(InputMethodEvent e) {
                //Recevoir des caractères pleine largeur
                bugfix.stopRunning();
                bugfix = new SwingPaintBugFix(w);
                bugfix.start();
            }
            @Override public void caretPositionChanged(InputMethodEvent e) {}
        });
        txtComp.addKeyListener(new KeyAdapter() {
            //Recevoir des caractères demi-largeur
            @Override public void keyTyped(KeyEvent e) {}
        });
    }

    @Override public void start() {
        new Thread(this).start();
    }

    @Override public void run() {
        while (running) {
            ((Component) w).repaint();
        }
    }

    private void stopRunning() {
        running = false;
    }
}

Cependant, je ne peux pas nier le fait d'exécuter constamment le processus avec while, et il faut du temps pour appliquer la classe de correction de bogue à tous les composants de type JTextComponent, j'ai donc décidé de rechercher une solution drastique.

Cause enquête

Pour le moment, ça ne guérit pas même si je le redémarre plusieurs fois.

Vous ne pouvez pas mettre à jour vers la dernière version tout en vérifiant s'il y a des problèmes avec Windows Update.

Bien que je pensais "Ammendo", je ne pouvais pas m'en empêcher, alors je suis passé en mode sans échec. Depuis que j'ai confirmé que le bogue ci-dessus ne se produit pas en mode sans échec, je m'abstiendrai de "processus d'arrière-plan" et de "service" et je reviendrai au démarrage normal.

"Ce n'est pas ça, ce n'est pas ça ...", terminez les tâches autres que le mode sans échec une à une depuis le gestionnaire de tâches, et identifiez enfin la cause!

3.png

Il semble que l'utilitaire audio appelé "Nahimic Service" soit le coupable. Quand j'ai essayé d'arrêter ce type, le bug a été résolu avec brio. En regardant Gugu, il semble que ce gars soit en compétition de différentes manières autres que celles liées à l'interface utilisateur.

... Dans ce cas, créer une classe de correction de bogue n'avait aucun sens.

Recommended Posts

Problèmes et solutions pour l'effondrement de l'interface utilisateur lors de l'entrée en japonais en swing
Problèmes et solutions lors de la création de index.html.erb avec RubyOnRails 4 sous Windows 10
Différence entre l'étiquette d'interface utilisateur par habillage de caractères et par habillage de mots dans l'affichage japonais
Erreurs, solutions et articles de référence survenus lors de la mise en place d'Heroku dans Vagrant