【发布时间】:2012-12-24 15:24:10
【问题描述】:
我对 Java 中的内部方法没有什么问题。排队:
dReservation[i].dispose();
我有一个错误:
不能在不同方法中定义的内部类中引用非最终变量 dReservation
我在论坛上阅读了很多帖子,但该问题有两种无效的解决方案:
Cannot refer to a non-final variable inside an inner class defined in a different method
Cannot refer to a non-final variable i inside an inner class defined in a different method
我已尝试将 JDialog[] dReservation 设置为我的班级 (GUIShowReservations) 的 global 字段。然后我的错误消失了,但是在内部方法中(actionPerformed)而不是dReservation[i]是null。
同样的历史是当我将JDialog[] dReservation 设置为final 字段时。是null。
bShowReservations = new JButton("Show Reservations");
bShowReservations.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
JDialog[] dReservation = new JDialog[10000];
for(Object o: reservations)
{
rez = (Reservations)o;
reservation.append(rez.getGroup());
dReservation[i] = new JDialog();
dReservation[i].setSize(400, 300);
dReservation[i].setLocationRelativeTo(null);
dReservation[i].setVisible(false);
dReservation[i].setLayout( null );
dReservation[i].setTitle("Edition");
bEditAccept = new JButton("Edit");
bEditAccept.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
rez.setTeacher(cEditTeacher.getSelectedItem().toString());
dao.update(rez);
dReservation[i].dispose();
}
});
bEditAccept.setSize(160, 24);
bEditAccept.setLocation(10, 200);
dReservation[i].add(bEditAccept);
}
}
});
你能帮帮我吗?我想在我的内部方法中看到正确的JDialog 而不是null。
【问题讨论】:
-
i声明在哪里?您能否展示一个简短但完整的程序来说明问题? -
i 被声明为全局变量。该变量在 dReservation 表声明之前被初始化 (i=0)。在循环 i 被迭代之后。我在帖子中删除了一些不必要的代码行。有趣的是,我在内部方法中看到了变量 i 的正确值。
标签: java methods nullpointerexception