Java 最后一个局部变量";名称“;无法分配,因为它是在封闭类型中定义的
我有这门课:Java 最后一个局部变量";名称“;无法分配,因为它是在封闭类型中定义的,java,class,variables,methods,visibility,Java,Class,Variables,Methods,Visibility,我有这门课: class Tester{ final String rigaFile=riga; final BufferedReader r=new BufferedReader(reader2); fr.getList().addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) {
class Tester{
final String rigaFile=riga;
final BufferedReader r=new BufferedReader(reader2);
fr.getList().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
// fr.getLabel().setText(fr.getList().getSelectedValue().toString());
while(rigaFile!=null)
{
String[] parts=rigaFile.split("\t");
for(int i=0;i<dim;i++)
{
if(listaPath.get(i).equals(parts[1]) && parts[1].substring(parts[1].lastIndexOf('/')+1, parts[1].length()).equals(fr.getList().getSelectedValue().toString()))
{
fr.getLabel().setText(fr.getList().getSelectedValue().toString());
}
}
try {
rigaFile=r.readLine();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
});
}
类测试器{
最终管柱刚度文件=刚度;
最终BufferedReader r=新的BufferedReader(读取器2);
fr.getList().addListSelectionListener(新ListSelectionListener()){
public void值已更改(ListSelectionEvent e){
如果(!e.getValueIsAdjusting()){
//fr.getLabel().setText(fr.getList().getSelectedValue().toString());
while(rigaFile!=null)
{
String[]parts=rigaFile.split(“\t”);
for(int i=0;i内部类只能在其为final时访问周围类的变量。这意味着您不能更改引用。因为java中的字符串是不可变的,所以您也不能更改其值
一种可能的解决方案是使用最终的StringBuilder
而不是String
,并在匿名内部类中更改其内容
final StringBuilder rigaFile = new StringBuilder(riga);
...
try {
rigaFile.setLength(0);
rigaFile.append(r.readLine());
} catch (IOException e1) {
您还必须更改while条件,因为rigaFile
永远不会为空。要获取rigaFile
的字符串值,您可以编写rigaFile.toString()
你认为异常告诉你什么?它再清楚不过了。你想从列表选择监听器内部更改rigaFile
,它在测试仪中声明。这是不可能的,因为它必须是最终的。诀窍是将rigaFile
声明为StringBuffere> (或StringBuilder
),因为它们是可变的,即您可以更改现有对象的值。