[JAVA] Probleme und Lösungen für die Benutzeroberfläche brechen zusammen, wenn Japanisch in Schwung eingegeben wird

Einführung

Swing verwandte Bugs in diesen Tagen? Ich litt darunter.

1.png

Angenommen, Sie bereiten JTextComponent-Komponenten wie JTextField und JTextArea wie folgt vor. Es gibt keinen besonderen Unterschied in der Anzahl der eingegebenen alphanumerischen Zeichen mit halber Breite, aber sobald ich Japanisch eingegeben habe,

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

Es gibt auch einige Fehler.

Als ich gegoogelt habe, habe ich eine Lösung gefunden, bei der ich mit "InputMethodListener" immer wieder auf "repaint ()" des Fensters klicken kann. Während ich den Frame nicht minimiert habe, habe ich nach der Eingabe von Zeichen voller Breite in die Komponente und dann "while" eine Lösung gefunden. Es wurde eine Bugfix-Klasse vorbereitet, mit der "repaint ()" des Frames weiterhin angezeigt wird.

Fehlerbehebungsklasse

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) {
                //Empfangen Sie Zeichen in voller Breite
                bugfix.stopRunning();
                bugfix = new SwingPaintBugFix(w);
                bugfix.start();
            }
            @Override public void caretPositionChanged(InputMethodEvent e) {}
        });
        txtComp.addKeyListener(new KeyAdapter() {
            //Empfangen Sie Zeichen mit halber Breite
            @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;
    }
}

Ich kann jedoch nicht leugnen, dass der Prozess währenddessen ständig ausgeführt wird, und es dauert einige Zeit, bis die Fehlerbehebungsklasse auf alle Komponenten vom Typ JTextComponent angewendet ist. Daher habe ich mich entschlossen, nach einer drastischen Lösung zu suchen.

Ursache Untersuchung

Im Moment heilt es nicht, selbst wenn ich es mehrmals neu starte.

Sie können nicht auf die neueste Version aktualisieren, während Sie prüfen, ob Probleme mit Windows Update vorliegen.

Obwohl ich "Ammendo" dachte, konnte ich nicht anders, also ging ich in den abgesicherten Modus. Da ich bestätigt habe, dass der oben genannte Fehler nicht im abgesicherten Modus auftritt, verzichte ich auf "Hintergrundprozess" und "Dienst" und kehre zum normalen Start zurück.

"Es ist nicht das, es ist nicht das ...", beenden Sie die anderen Aufgaben als den abgesicherten Modus nacheinander vom Task-Manager und identifizieren Sie schließlich die Ursache!

3.png

Es scheint, dass das Sound-Dienstprogramm "Nahimic Service" der Schuldige war. Als ich versuchte, diesen Kerl aufzuhalten, wurde der Fehler brillant behoben. Wenn man sich Gugu ansieht, scheint es, dass dieser Typ auf andere Weise als mit der Benutzeroberfläche konkurriert.

... In diesem Fall war es nicht sinnvoll, eine Bugfix-Klasse zu erstellen.

Recommended Posts

Probleme und Lösungen für die Benutzeroberfläche brechen zusammen, wenn Japanisch in Schwung eingegeben wird
Probleme und Lösungen beim Erstellen von index.html.erb mit RubyOnRails 4 unter Windows 10
Unterschied zwischen UI-Beschriftung durch Char Wrapping und Word Wrapping in der japanischen Anzeige
Fehler, Lösungen und Referenzartikel, die beim Einfügen von Heroku in Vagrant aufgetreten sind