2017-11-12 18 views
-1

私はスイングで作業しています。これは、私が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; 
} 
+0

私に尋ねると、エラーメッセージは明らかです。内部クラスの変数を参照する場合は、finalでなければなりません。 –

+0

エラー:最終変数に値を割り当てることはできません –

答えて

1

JOptionPaneクラスを使用して、showConfirmDialog()メソッドの1つを使用して確認ダイアログを表示して確認ダイアログを作成します。このようなダイアログの作成方法については、JavaチュートリアルHow to Make Dialogsを読んでください。ソースコードは次のようになります。

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 
} 
3

あなたのプログラムは何を期待していますか?

あなたが書いたコードは、行うことを試みます。

  • は、「はい」ボタンと「ログアウト」フレームを作成します。
  • 変数sの値でlogout()メソッドから戻ります。 後でユーザが「はい」ボタンを押すと
  • は、あなたがしてにアクションリスナーを用意し1s変数を設定する - しかし、あなたはすでにlogout()メソッドから返されることは、動作しないことができる、と変数sはもはや存在しません。

コンパイラが問題についてあなたに言ったことを嬉しく思います。

ユーザーのログアウトの承認を待っているとします。その後、JOptionPaneメソッドを使用してください(Javaチュートリアルでは、これを正しく行う方法がわかります)。

ところで、フォーマットしてコードを正しくインデントする習慣を身につけてください。あなたのコードを読むのは楽しいことではありませんでした。

+0

Eclipseを使用している場合は、Eclipseを使用している場合は、ワンクリックで機能させることができますあなたのコード:Source/Correct IndentationとSource/Format。 –

+0

私はEclipseを使用していません。 –

+0

* "私はEclipseを使用していません" * Javaコードの書き込み/編集にはどのようなソフトウェア**を使用しますか? –

関連する問題