我的主类在main
方法中运行。它运行一个可能需要大量时间才能完成的进程,所以我创建了另一个方法来停止该进程:它只是引发一个标志,使整个进程停止:
public void stopResolutionProcess() {
stop = true;
}
boolean solutionFound = tournament.solve();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Stop resolution process? (Y/N): ");
String answer = sc.next();
if (answer.equalsIgnoreCase("y")) {
tournament.getSolver().stopResolutionProcess(); // error here
}
}
});
为了测试停止进程的方法,我应该采取什么方法来解决这个问题?
你的问题本身就有你所问的答案。
在封闭范围内定义的局部变量锦标赛必须是最终的或实际上是最终的
如果匿名类是在任何方法中创建的,那么所有在方法中定义但在匿名类主体之外的局部变量都应该是最终变量,以防需要在匿名类中使用它们。
public class OuterClass{
int x,y;
public void someMethod(){
final int neededByAnonymousClass = x + y + 30;
Runnable runnable = new Runnable(){
// This is like we are creating a class which simply implements Runnable interface.
// Scope of this class is inside the method someMethod()
// run() method may be executed sometime later after the execution of someMethod() has completed.
// all the local variables needs to be final in order they can be used later in time when run() gets executed.
public void run(){
System.out.println(neededByAnonymousClass+ 40);
}
}
Thread thread = new Thread(runnable); // passing the object of anonymous class, created above
thread.start();
}
}
[第1行:方法A,第2行方法A,第3行:匿名类,第4行匿名类的方法,第5行方法A]==>执行顺序
第1行,第2行,第3行(只是匿名类的对象创建),第5行。稍后,当调用匿名类创建的对象上的方法时,将执行第4行。
我正在尝试创建一个I*J数量的按钮。 提前多谢。
问题内容: 我是lambda和Java8的新手。我面临以下错误。 封闭范围中定义的局部变量日志必须是final或有效的final 问题答案: 该消息说,到底是什么问题:你的变量 数 必须是最后的(即:携带关键字决赛),也可以有效地最终(即:你只有一个值分配给它 一旦 拉姆达外)。否则,您将无法在lambda语句中使用该变量。 但是,当然,这与您使用 log 冲突。关键是:您不能在lambda内部写
问题内容: 我收到错误提示,就像在主题中一样,请问如何修复…错误在menuItem循环中,在这里我尝试将textArea前景颜色设置为从menuItem中选择的一种:(colors [mi]) 问题答案: 该错误意味着 您不能在内部类中使用局部变量。 要在内部类中使用变量,必须对其进行声明。只要是循环计数器并且不能分配变量,就必须创建一种变通方法来获取可在内部类内部访问的变量中的值: 因此,您的代
这个问题在这里已经有了答案: > 为什么匿名类只能访问最终变量? 为什么对于实例变量[重复]忽略“Lambda表达式中使用的变量必须是final或实际上是final”警告 “lambda在start方法参数被垃圾回收后才能运行”是什么意思? 为什么要复制?
当我在写这段代码时,我得到了一个编译时错误,它说:“lambdas中的变量必须是final或实际上是final”。