Java Swing中的接口和NullPointerException
我正在使用JDBC开发与MySql连接的销售和采购库存系统。最初的应用程序是让JFrame中的JPanel与SalesForm一起输入发票、客户项目名称等,并使用表格显示输入的数据。现在我继续扩展这个应用程序,选择获取报告,它需要在JFrame中更改/滑动JPanel,所以我在主框架上使用CardLayout。 以前的结构是这样的: AppMain类->大型机使用BorderLayout扩展JFrame添加了JPanel SalesForm和JPanel表 新结构: AppMain类->大型机使用CarLayout扩展JFrame添加了JPanel Welcome->Welcome扩展了具有用于销售和报告的JButton的JPanel 单击sales按钮并进一步打开SalesPanel扩展了JPanel,添加了JPanel SalesForm和JPanel表 在更改此结构之前,一切正常,我使用接口SalesFormListenerSaleFormEvent eve,其中SaleFormEvent扩展了EventObject,用于将所有表单值传递到大型机,在大型机中调用控制器类,控制器类将值移动到模型。更改结构后,单击sales按钮会给出nullpointerexception接口变量示例代码如下所示Java Swing中的接口和NullPointerException,java,swing,interface,nullpointerexception,actionlistener,Java,Swing,Interface,Nullpointerexception,Actionlistener,我正在使用JDBC开发与MySql连接的销售和采购库存系统。最初的应用程序是让JFrame中的JPanel与SalesForm一起输入发票、客户项目名称等,并使用表格显示输入的数据。现在我继续扩展这个应用程序,选择获取报告,它需要在JFrame中更改/滑动JPanel,所以我在主框架上使用CardLayout。 以前的结构是这样的: AppMain类->大型机使用BorderLayout扩展JFrame添加了JPanel SalesForm和JPanel表 新结构: AppMain类->大型机使
public class SalesForm extends JPanel{
private SalesFormListener listener;
..........
public SalesForm(){
.....
JButton sales = new JButton("Sales");
..........
sale.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
double price = Double.parseDouble(itemPrice.getText());
double itemQuantity = Double.parseDouble(quantity.getText());
double itemSale = Double.parseDouble(totalPrice.getText());
double customerPayment = Double.parseDouble(payment.getText());
double discountCal = Double.parseDouble(discount.getText());
SaleFormEvent eve = new SaleFormEvent(sale, invoice.getText(), customerName.getText(), itemName.getText(), price, itemQuantity, discountCal, itemSale, customerPayment);
if (eve != null){
listener.saleFormListener(eve);
}
}
});
.............
}
public void setSaleFormListener(SaleFormListener listener){
this.listener = listener;
}
现在是扩展JFrame的MainFrame类
public class MainFrame extends JFrame{
.........
private SalesForm salesForm = new SalesForm();
public MainFrame(){
........
salesForm.setSaleFormListener(new SaleFormListener() {
public void saleFormListener(SaleFormEvent eve) {
}
});
.............
}
最后是接口
public interface SaleFormListener {
public void saleFormListener(SaleFormEvent eve);
}
我尝试将这个大型机工作转移到SalesPanel,它实际上显示SalesForm,并且工作正常。我很困惑为什么我不能在MainFrame.class中执行此操作。。。可能是因为SalesPanel现在显示SalesForm,而接口方法只能在第一个内容窗格调用,如SalesPanel Extendes JPanel。
我知道那个问题很长,但如果没有完整的描述,就不可能解释所有的情况和影响。我将完成它,并为其他初学者免费提供源代码和应用程序 请添加stacktrace并标记发生异常的行。听起来您有一个混合引用问题,即,您认为要添加到视图中的面板不是具有注册listenerException的面板。我正在调用接口类listener.saleFormListenereve的ActionListener中的SalesForm中发生异常。。。它的意思是没有注册的侦听器。我是初学者,明白了吗&