Java 从另一个类设置JTextField

Java 从另一个类设置JTextField,java,Java,我在设置另一个类的JTextField时遇到问题。当我按下按钮“=”时,它应该在AddNumbers类中进行计算,并将JTextField设置为计算结果。但目前它正在抛出NullPointerException。我不知道如何设置JTextField。由于责任链设计,我必须将其设置在AddNumber中 public class AddNumbers implements Chain { private Chain nextInChain; public CalcGui calcgui; int

我在设置另一个类的JTextField时遇到问题。当我按下按钮“=”时,它应该在AddNumbers类中进行计算,并将JTextField设置为计算结果。但目前它正在抛出NullPointerException。我不知道如何设置JTextField。由于责任链设计,我必须将其设置在AddNumber中

public class AddNumbers implements Chain {
private Chain nextInChain;
public CalcGui calcgui;
int result=0;

@Override
public void setNextChain(Chain nextChain) {
    // TODO Auto-generated method stub
    this.nextInChain=nextChain;
}

@Override
public void calculate(Numbers request) {
    // TODO Auto-generated method stub
    if(request.GetCalcWanted()=="add") {
        result = request.GetNumber1()+ request.GetNumber2();
        this.calcgui.txtWynik.setText(String.valueOf(result)); //NULLPOINTER
    }else {
        nextInChain.calculate(request);
    }
}
这是CalcGui类

public class CalcGui {

private JFrame frame;
JTextField txtWynik; 
static Numbers request;
int x,y;
String operation;
boolean clicked = false;
/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                CalcGui window = new CalcGui();
                window.frame.setVisible(true);


            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public CalcGui() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 270, 361);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    txtWynik =new JTextField();
    Chain chainCalc1=new AddNumbers();    
    JButton btneq = new JButton("=");
    btneq.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            request = new Numbers(x,y,operation);
            chainCalc1.calculate(request);

        }
    });

我给你一个想法,这个方法:

public void calculate(Numbers request) {
可以接收对JTextField的引用,如下所示:

public void calculate(Numbers request,JTextField out) {
    if(request.GetCalcWanted().equals("add")) {
        result = request.GetNumber1()+ request.GetNumber2();
        out.setText(String.valueOf(result)); //NO NULLPOINTER SINCE YOU PASS PARAMETER
    }else {
        nextInChain.calculate(request);
    }
}
我认为这可以解决你的NPE问题

干杯


-Rod

我知道它与JTextField或CalcGui有问题,可能需要以某种方式传递引用?但是我不知道怎么做。你有几个问题:(1)你用
=
而不是
.equals
进行字符串比较。(2)
String operation
的值从未设置过,因此它为空-出于同样的原因,您的
x
y
始终为0。(3) 您从未初始化过this.calcgui,因此它也是空的。(4) 您在
CalcGui
AddNumbers
之间存在循环依赖关系-虽然不一定是问题,但很可能是造成您混淆和问题的关键原因我正在程序中设置操作x,y,但我没有发布这部分代码。我只是发布了必要的片段,因为其中有很多。
calculate
需要返回操作结果,可以直接作为
return
值,也可以通过
Numbers
classOk间接返回,然后请单击按钮,然后我可以回答您的问题,我这样做是为了回答你的问题。谢谢,祝你过得愉快。我很乐意这样做,但声誉低于15的用户的投票不会改变公开显示的帖子分数。
if(request.GetCalcWanted()=“add”){
?你真的建议进行这种平等性检查吗?
if(request.GetCalcWanted()=“add”){
对不起,什么?!不,我不会将文本字段传递给方法。更新组件不是方法的责任,它超出了其责任范围。“更好”的解决方案是返回计算结果