これはロビンによって解決されました。ロビンありがとう!
私がやりたいことの背後にある考え方は、X秒ごとにアクションを実行するタイマーを作成することですが、Xは使用ごとに変更する必要があります。
今、私はこのようにやっています:
try {
final FileWriter fstream = new FileWriter("timetest.log");
final BufferedWriter out = new BufferedWriter(fstream);
ActionListener task_performer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
critical_requests[0]++;
try {
System.out.println("DEBUG: Critical Section requests: " + critical_requests[0] + "\n");
out.write("Critical Section request:\t" + critical_requests[0] + "\n");
} catch (IOException e) {
System.out.println(e.getMessage() + "\n");
}
((Timer)evt.getSource()).setDelay( 150 + (rand.nextInt(10) * time_unit ));
}
};
new Timer(wait_delay, task_performer).start();
System.out.println("Entering while loop\n");
while(true) {
if(critical_requests[0] >= 60){
try {
out.close();
} catch (IOException e) {
System.out.println("Close failed for some reason:\t" + e.getMessage() + "\n");
System.exit(-1);
}
System.exit(0);
}
//System.out.println("" + critical_requests[0] + "\n"); // Debug
critical_requests[0] = critical_requests[0]; // Java is an insane language and it requires me to have this line here
}
} catch (IOException e) {
System.out.println(e.getMessage());
System.exit(-1);
}
私が得るエラーは次のとおりです。
local variable is accessed from within inner class; needs to be declared final
それらのいくつかを最終的にしようとしましたが、リスナー内の値を変更できません。さらに、一部の変数はfinalにする意味がありません(BufferedWriter out、rand)。
5つのコンパイラエラーはすべて次のとおりです。ローカル変数randは内部クラス内からアクセスされます。out、rand、wait_delayの場合はそれぞれ最後に1つ、critical_requestsの場合は2つ宣言する必要があります。
どうすればこれを調整できますか?