Java 错误:从内部类引用的局部变量必须是final或有效final

Java 错误:从内部类引用的局部变量必须是final或有效final,java,swing,Java,Swing,我在荡秋千。这是我用来创建注销框架的代码,该框架将返回一个int值,使用该值可以在前面的函数中执行其他操作。但是我犯了一个错误。我该如何解决它 public int logout() { int s=0; JFrame main=new JFrame("Logout"); Dimension d=Toolkit.getDefaultToolkit().getScreenSize(); main.setSize(d.width/2,d.height/3); main.setLa

我在荡秋千。这是我用来创建注销框架的代码,该框架将返回一个int值,使用该值可以在前面的函数中执行其他操作。但是我犯了一个错误。我该如何解决它

 public int logout()
{ 
int s=0;
    JFrame main=new JFrame("Logout");
    Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
main.setSize(d.width/2,d.height/3);
main.setLayout(new FlowLayout());
    JButton yes=new JButton("Yes");
main.add(yes); main.setVisible(true);   
    yes.addActionListener(new ActionListener()
{
    public void actionPerformed(java.awt.event.ActionEvent e)
    {
        s=1;
    main.setVisible(false);
    }
    });

    return s;
}

你希望你的程序做什么

您编写的代码尝试执行以下操作:

  • 创建一个带有“是”按钮的“注销”框架
  • 使用
    s
    变量的值从logout()方法返回
  • 以后用户按下“是”按钮时,您准备了一个操作侦听器来,然后
    s
    变量设置为
    1
    ——但这不起作用,因为您已经从
    注销()
    方法返回,并且变量
    s
    甚至不再存在
所以,很高兴编译器告诉了你一个问题

我想您应该等待用户的注销批准。然后使用
JOptionPane
方法(Java教程将帮助您正确地执行此操作)

顺便说一下:养成正确格式化和缩进代码的习惯。阅读代码并不有趣。

使用类创建确认对话框,方法是使用
showConfirmDialog()
方法之一来显示确认对话框。请阅读Java教程,了解如何创建这样的对话框。源代码应该如下所示:

int choice = JOptionPane.showConfirmDialog(your_main_frame,
                                           "Do you want to logout?",
                                           "Logout?",
                                           JOptionPane.YES_NO_OPTION);
if (choice == JOptionPane.YES_OPTION) {
    // "Yes" clicked
} else {
    // "No" clicked
}

如果你问我的话,错误信息是非常清楚的。如果你想在一个内部类中引用一个变量,它必须是最终的。让它更漂亮的提示:如果你使用像Eclipse这样的IDE(希望你这样做,它会让你的生活更简单),有一些一键式函数可以“美化”你的代码:源代码/正确的缩进和源代码/格式。“我不使用Eclipse”您使用什么软件编写/编辑Java代码?