java代码中的NullPointer错误

时间:2014-02-06 17:55:33

标签: java nullpointerexception

我正在尝试运行一个java类 fwd_TLit ,它扩展了类 layout_ETP ,这是我项目的布局。它是使用 gridBag布局构建的。现在,当我尝试运行 fwd_TLit 时,我面临NullPointerException .Plz有人帮助我将会出现错误并且没有输出。 layout_ETP 的代码: -

public class layout_ETP {

            static Font f=new Font("Papyrus",Font.BOLD ,50);
    static Font f1=new Font("Papyrus",Font.BOLD ,30);

        public static JLabel l,l1,l2;
        public static JButton clearBtn,convertBtn,obj;
        public static JTextArea  ta,ta1;
        public static JPanel footer;


    public static void main(String[] args) {


        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame();
            frame.setSize(600, 600);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setFont(f);
        frame.setTitle("Natural Language Processor");

        frame.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();

            // Setting the label for the nlp            
            l = new JLabel("Natural Language Processor");
            l.setFont(f);
            c.weightx = 0.0;
            c.gridx = 0;
            c.gridy = 0;
            c.ipady = 20;
            c.fill = GridBagConstraints.NONE;
            c.anchor = GridBagConstraints.FIRST_LINE_START;
            frame.add(l, c);

            l1 = new JLabel("English");
            l1.setFont(f1);
            c.gridy = 1;
            c.weighty = 0.0;
            frame.add(l1, c);
        }

fwd_TLit 的代码: -

public class fwd_TLit extends layout_ETP {

    public void transliteration() {
        ta.setText("Hello");
        String str = ta.getText().toString();
        ta1.setText(str);
    }

    public static void main(String[] args) {
        try{
            fwd_TLit obj = new fwd_TLit();
            obj.transliteration();
        } catch(Exception e) {
            System.out.println(e);
        }
    }
    }

对不起那些家伙,但我正试图把那个班级中最小的代码.. !!我有所有必要的东西,如字体,声明等......但是在 fwd_TLit 类中面对这个问题。我认为问题必须在那里...... !!

2 个答案:

答案 0 :(得分:1)

这部分是对你的评论的答案。

正如我在评论中指出的那样,你有两个主要方法。虽然你没有发布堆栈跟踪,但是我能看到的唯一可以导致NullPointerException的地方是fwd_TLit类的主要方法,这是我假设实际上正在运行的。

fwd_TLit中,您尝试使用其父类中尚未实例化的字段。这就是我所说的:

public void transliteration() {
    ta.setText("Hello"); // RIGHT HERE
    String str = ta.getText().toString();
    ta1.setText(str); // AND TECHNICALLY HERE AGAIN
}

虽然这些变量确实在父类的main方法中实例化,但不会自动调用该main方法。我的建议是创建某种静态初始化方法,在其中创建所有这些对象(我相信它们是layout_ETP类的main方法中的大部分或全部代码)。您可以调用静态初始化方法 BEFORE 调用transliteration,或任何其他需要使用这些字段的方法。

旁注:

由于您要实例化新的fwt_TLit对象,因此这些变量(例如tata1等)不需要是静态的。

正如鲍里斯蜘蛛和蝎子指出的那样,请取悦(我不能强调这一点),请遵循Java命名约定样式(可以在Scorpion提供的链接中找到)。看看你的代码,我一眼就看出fwt_TLittata1(...等)是什么或做了什么,我也无法确定什么是类(应该以大写字母开头),什么是变量(以小写字母开头)。在软件开发中,可读性对于代码可维护性至关重要(而不是激怒你的同事)。

答案 1 :(得分:0)

... 编辑:刚看完Teeg的评论。 如果我运行layout_ETP.java,它适用于我(在设置f和f1之后)。

fwd_TLit正在抛出java.lang.NullPointerException。 它包含两个变量“ta”和“ta1”,它们是在哪里创建的?

那你想做什么?