在我的Swing应用程序中,我使用JTextField组件获取波斯语文本值。

我想使用以下代码为此组件设置语言环境:

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


但是txt_fname.getInputContext()返回null并且代码抛出NullPointerException

我怎么解决这个问题?

已编辑

该代码在InternalJFrame构造函数中调用:

public DriversList() {
    initComponents();
    txt_fname.getInputContext().selectInputMethod(new Locale("fa", "IR"));
}

最佳答案

此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 . . .

10-07 16:09