編輯:謝謝你所有的答案,真的幫助了很多和一些不錯的提示。hiddenText = ca.a.getText();給NullPointerException?
大家好, 我在這裏是新來的,Java編程新手,所以我會盡力提供任何相關信息。我的問題是我想創建兩個類,第一類(ClassA)是一個GUI,第二個(ClassB)是(ClassA)的邏輯。
我的代碼一個簡單的例子是: -
ClassA的
import javax.swing.*;
import java.awt.*;
public class ClassA extends JFrame {
JTextField a = new JTextField();
JButton but = new JButton("Click");
ClassB cb = new ClassB();
public ClassA() {
setTitle("Test");
setLookAndFeel();
setSize(250, 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout mainGrid = new GridLayout(1, 1, 20, 20);
setLayout(mainGrid);
add(a);
add(but);
but.addActionListener(cb);
setVisible(true);
}
private void setLookAndFeel() {
try {
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"
);
} catch (Exception exc) {
//ignore error
}
}
public static void main(String[] args) {
ClassA Alch = new ClassA();
}
}
ClassB的
import java.awt.event.*;
public class ClassB implements ActionListener{
String command;
String text;
ClassA ca;
@Override
public void actionPerformed(ActionEvent event) {
command = event.getActionCommand();
if (command.equals("Click")) {
text = ca.a.getText();
System.out.println(text);
}
}
}
我有越來越ClassB的閱讀的JTextField 的問題。
如果我刪除線
text = ca.a.getText();
,並使用
System.out.println(command);
它輸出點擊使代碼的其餘部分似乎工作,但只要我添加
text = ca.a.getText();
當我使用「單擊」按鈕時,我得到一個NullPointerException。
所以問題是我應該如何編寫代碼來讓ClassB讀取JTextField並輸出它?
如果您在ClassB的構造函數中執行'ClassA ca = new ClassA()',您將創建一個變量作用域以覆蓋該類中'ca **'字段**的構造函數。 – 2012-07-18 15:35:51
這就是* *所表示的詞。顯然,如果它在構造函數中,它應該是'ca = new ClassA()',而OP可以修改變量聲明爲'ClassA ca = new ClassA();'。但是由於OP確實聲稱是該語言的新手,我會更新我的文章以使其更清晰。 – 2012-07-18 15:41:40