我正在尝试运行一个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 类中面对这个问题。我认为问题必须在那里...... !!
答案 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
对象,因此这些变量(例如ta
和ta1
等)不需要是静态的。
正如鲍里斯蜘蛛和蝎子指出的那样,请取悦(我不能强调这一点),请遵循Java命名约定样式(可以在Scorpion提供的链接中找到)。看看你的代码,我一眼就看出fwt_TLit
,ta
,ta1
(...等)是什么或做了什么,我也无法确定什么是类(应该以大写字母开头),什么是变量(以小写字母开头)。在软件开发中,可读性对于代码可维护性至关重要(而不是激怒你的同事)。
答案 1 :(得分:0)
... 编辑:刚看完Teeg的评论。 如果我运行layout_ETP.java,它适用于我(在设置f和f1之后)。
fwd_TLit正在抛出java.lang.NullPointerException。 它包含两个变量“ta”和“ta1”,它们是在哪里创建的?
那你想做什么?