2016-04-23 10 views
1

ボタンを押すたびに積算合計を計算したいと思います。数量+合計数量(ボタンがすでに押されている場合)を加算する必要があります。以下は私のコードスニペットです。上記のコード、エラーでコードネーム1:各ボタンの繰り返しの合計を計算するには?

TextField quantity = new TextField("", "Volume of water (ml)", 4, TextArea.ANY); 
intake.addComponent(quantity); 

Button add = new Button("Add"); 
intake.addComponent(add); 

... 

int total = 0; 

//-------------------------------------------------------------- 
add.addActionListener((ActionEvent ev) -> { 
Storage s = Storage.getInstance(); 

try { 

    String num = quantity.getText(); 
    Integer num2 = Integer.parseInt(num); 

    String name = itemName.getText(); 

    total += num2; 
    Dialog.show("", "You have consumed a total of " + Integer.toString(total) + "ml of water", "OK", "Close"); 

... 

} catch { 
    ... 
} 

}); 

(「ラムダ式から参照されるローカル変数は、最終又は最終有効でなければならない」)以下のコードのために発生します。私はまた、「公共のボイドのactionPerformed()」メソッドを試してみましたが、その結果、ノー成功

total += num2; 
Dialog.show("", "You have consumed a total of " + Integer.toString(total) + "ml of water", "OK", "Close"); 

で、私は、実行中の合計をコーディングする方法上の任意の助けや指導をお願い申し上げます。

答えて

1

totalをあなたのクラスのメンバーにします。ラムダ(イベントコール)はパラレルで発生する可能性があるため、ラムダ内からの合計を変更すると不正な状態になる可能性があります(技術的にイベントは並列には発生しませんが、Javaコンパイラはそのことを知らず、

2

合計変数を直接操作する代わりに呼び出されるincreaseTotalなど、代替としてメソッドを使用できます。 Shaiがイベントを並行して実行することはできないので、同期タグを追加する必要はありません。

public void increaseTotal(int addedValue){ 
    this.total += addedValue; 
} 
関連する問題