JTextField.getInputContext () возвращает нулевое значение

1

В моем приложении Swing я использую компонент JTextField для получения значений текста Farsi.

Я хочу установить языковой стандарт для этого компонента, используя следующий код:

txt_fname.getInputContext().selectInputMethod(new Locale("fa", "IR"));

Но txt_fname.getInputContext() возвращает значение null а код txt_fname.getInputContext() NullPointerException.

Как я могу решить эту проблему?

отредактированный

код вызывается в конструкторе InternalJFrame:

public DriversList() {
    initComponents();
    txt_fname.getInputContext().selectInputMethod(new Locale("fa", "IR"));        
}
  • 1
    Чтобы быстрее помочь, опубликуйте MCVE (Минимальный завершенный и проверяемый пример).
  • 0
    Из документации Java: «входной контекст, используемый этим компонентом; ноль, если контекст не может быть определен». Таким образом, в вашем случае контекст не может быть определен. Может быть, вы можете создать новый Context-Object и каким-то образом установить его для JTextField ..
Теги:
swing
nullpointerexception
jtextfield

1 ответ

3
Лучший ответ

Этот MCVE предлагает код, который вы не показывали, пытается получить входной контекст перед первым текстовым полем.

Код

import java.awt.*;
import javax.swing.*;

class InputContextTest {

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                JTextField tf = new JTextField(10);
                System.out.println(tf.getInputContext());
                JOptionPane.showMessageDialog(null, tf);
                System.out.println(tf.getInputContext());
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency
        SwingUtilities.invokeLater(r);
    }
}

Вывод

null
sun.awt.im.InputMethodContext@1fa5e5e
Press any key to continue . . .
  • 0
    Я использую код в конструкторе JFrame! Может ли это быть причиной?
  • 0
    Спасибо, проблема решена с помощью объекта Runnable для вызова кода, изменяющего значение локали и вызывающего его позже.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню