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

时间:2017-11-12 11:01:42

标签: java swing

我正在使用秋千。这是我用来为logout创建一个返回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;
}

2 个答案:

答案 0 :(得分:3)

您希望您的计划做什么?

您编写的代码尝试:

  • 创建"退出"框架与"是"按钮。
  • 使用s变量的值从logout()方法返回。
  • 稍后时,用户按下"是"按钮,您准备了一个动作监听器然后s变量设置为1 - 但这不起作用,因为您已经从{{1}返回方法,变量logout()甚至不再存在。

所以,请高兴编译器告诉你一个问题。

我想您要等待用户的注销批准。然后使用s方法(Java教程将帮助您正确地完成此操作)。

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

答案 1 :(得分:1)

使用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 } 方法创建确认对话框,以显示确认对话框。请阅读Java教程equality contract,了解如何创建此类对话框。源代码应如下所示:

new Vue({
  el: '#app',
  data: {
    params: {}
  },
  computed: {
    query () {
      var query = []
      for (param in this.params)
        if (this.params[param].length > 2)
          query.push(param + '=' + this.params[param])
      query.length
        ? query = '?' + query.toString().replace(/,/g, '&')
        : query = ''
      return query
    }
  },
  methods: {
    submit () {
      console.log('my.url' + this.query)
    }
  }
})