private void pushButtonActionPerformed(java.awt.event.ActionEvent evt)
{
final int c=0;
final JDialog d=new JDialog();
JLabel l=new JLabel(\"Enter the E
You've got c declared in a function, and then you've created an anonymous inner class within that function. This inner class, the ActionListener, persists past the time your function terminates - so it can't assign values to c, because c is local to the function.
The warning about "final" is misleading - that's just the compiler telling you that you can't access transient local variables from an anonymous class. You can't solve the problem just by making c final, as that would prevent any assignment to it at all, but you can make c an instance member of the class pushButtonActionPerformed is in, instead. Something like this:
class Something
{
int c;
private void pushButtonActionPerformed(java.awt.event.ActionEvent evt)
{
JButton but1=new JButton("OK");
but1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
c=Integer.parseInt(f.getText());
}
});
}
}
I'll skip the reasons and cut to the solution: use
final int[] c = {0};
...
c[0] = Integer.parseInt(f.getText());
For the full story refer to this post
but the line "c=Integer.parseInt(f.getText());" i am getting an error "cannot assign a value to a final variable
Right. The whole point of final
variables is that you can only assign to them once, but you're trying to assign to it twice (once in the initialization setting it to 0
, once in your quoted line). From the specification:
A variable can be declared
final
. Afinal
variable may only be assigned to once. Declaring a variablefinal
can serve as useful documentation that its value will not change and can help avoid programming errors.It is a compile-time error if a
final
variable is assigned to unless it is definitely unassigned (§16) immediately prior to the assignment.A blank
final
is afinal
variable whose declaration lacks an initializer.Once a
final
variable has been assigned, it always contains the same value. If afinal
variable holds a reference to an object, then the state of the object may be changed by operations on the object, but the variable will always refer to the same object.
(Their emphasis, not mine.)
Instead of trying to track the state you're storing in c
in a variable in the method, track it in a data member in the instance of your anonymous ActionListener
you're creating.
a variable is declared with final keyword means its value cannot be changed. final variable are like constants
This is the reason that keyword final
exists in java. The variable is final, i.e. its value cannot be changed. If you have to change the value do not mark variable as final.
Just remove the final
keyword from the declaration and continue your program. As final
keyword means the value is unaltered.