抱歉,我不知道正确的措辞。我到处尝试过搜索。
我想将实时创建的值转换为固定值。
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
//make new button
JButton btnGroup = new JButton(listOfFiles[i].getName().substring(0, listOfFiles[i].getName().length() - 4));
btnGroup.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try(BufferedReader br = new BufferedReader(new FileReader(listOfFiles[i].getName()))) {
编辑:更明确的解释。
如果我通过点击操作实时创建这样的按钮:&#34; filereader(listOfFiles [i] .getname()&#34;,[i]将产生错误&#34; Local我在封闭范围内定义的变量必须是最终的或有效的最终#34;
而不是:
BufferedReader br = new BufferedReader(new FileReader(listOfFiles[i].getName()))
它应该说:
BufferedReader br = new BufferedReader(new FileReader("file.txt"))
但事先我不知道该文件的名称。
答案 0 :(得分:0)
在将动作添加到按钮之前,我需要将Filereader()的内容设为final。
固定代码:
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
final String filetoread = listOfFiles[i].getName();
JButton btnGroup = new JButton(listOfFiles[i].getName().substring(0, listOfFiles[i].getName().length() - 4));
btnGroup.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try(BufferedReader br = new BufferedReader(new FileReader(filetoread))) {