- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的主类在 main
方法中运行。它运行一个可能需要大量时间才能完成的进程,因此我创建了另一种方法来停止该进程:它只是引发一个标志,使整个进程停止:
public void stopResolutionProcess() {
stop = true;
}
这是执行大进程的调用:
boolean solutionFound = tournament.solve();
所以就在它之前,我需要运行一个辅助线程来调用 stopResolutionProcess()
:
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
}
}
});
但是我在最后一行遇到错误。它说:
Local variable tournament defined in an enclosing scope must be final or effectively final
为了测试停止进程的方法,我应该采取什么方法来解决这个问题?
最佳答案
那么问题是什么..一个小例子
String myString = new String("MyString");
Thread thr = new Thread() {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(myString);
}
}
}
thr.start();
myString = new String("AnotherString");
那么你期望这里的输出是什么?像这样的东西:
MyString
MyString
AnotherString
AnotherString
AnotherString
问题是您不知道 myString
变量何时更改。这可能发生在打印 0 次之后、打印 5 次之后或两者之间的任何时间。或者换句话说,这是不可预测的,也不太可能是故意的。
为了具有定义的行为,您在线程中使用的变量需要是最终的:
final String myString = new String("MyString");
Thread thr = new Thread() {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(myString);
}
}
}
thr.start();
// now this following line is not valid anymore and will lead to a compile error
myString = new String("AnotherString");
现在我们有了定义的行为,我们知道输出将是:
MyString
MyString
MyString
MyString
MyString
关于java - 线程 : Local variable defined in an enclosing scope must be final or effectively final,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36530790/
template class Vec { T data[S]; public: constexpr Vec(const T& s) : data{s} {} }; templ
我需要不同的参数集,所以我决定使用 @Enclosed .但是,嵌套类必须是静态的,因此方法调用的所有现有方法/常量都必须是静态的。但这很难,因为我无法更改所有这些方法的定义。 有没有什么方法可以不用
编译本规范时: import org.specs.Specification import org.specs.matcher.extension.ParserMatchers class Parse
想法:制作一个内联便捷函数,以同步“内联”对象的固有锁上的函数调用: public inline fun intrinsicSync(block: () -> T): T { return
我有一个如下所示的二维数组: var map = [ [0,0,0,0,0,0,0,0,0,0], [2,2,2,0,0,0,0,0,0,0], [2,2,2,0,2,2,0,
我的项目有问题。我有 2 个类:MainActivity 和 Insert。我在“插入”类中出现错误。 对话框 = new ProgressDialog(MainActivity.this); 我的错
我正在使用 EXCEL 创建一组 UPDATE 语句。许多行的列中包含单引号字符作为字段值的一部分。有没有办法告诉 MySQL 使用“或 ' 之外的不同 ENCLOSURE 字符? 如果能够将角色从标
我正在尝试向 C# 应用程序添加一些新功能 - 特别是,试图复制它的某些行为,但在 Web 浏览器中,而不是像现在这样在应用程序中。 我试图从 MainWindow.cs 类中的方法内部调用在 Bro
复制者: enum IDs { ID { @Override void getId() { w(); // warning here
在 Eclipse 中,当您创建一个类时,有一个复选框显示“封闭类型”。有谁知道它的作用?我附上了截图。 最佳答案 您可以添加 nested class使用 Enclosing type 选项 例如类
这个问题在这里已经有了答案: Is not an enclosing class Java (12 个答案) 关闭 8 年前。 嘿,这是我第一次使用堆栈溢出,我试图在不同的文件中调用一个类(Main
我需要 Select 查询,它会在最后将结果写入文件。我希望输出列用双引号分隔,并且我希望在字段之间有逗号,但是我得到一个查询不正确的错误。 select hostname,ip FIELDS TER
这是我收到错误的代码:错误:不是封闭类:MainActivity。请帮我看看我的代码有什么问题。 public class MyFirebaseMessagingSerivce extends Fir
我有一个以下列类开头的 libgdx 程序: public class MyActivity extends AndroidApplication implements IActivityReques
我在执行以下代码时遇到问题。 实际上,我想使用图像作为指向另一个页面或 Activity 的链接。这是怎么做到的 和 “MainActivity.this 不是封闭类”的问题究竟是什么?这是代码 我有
我有 tsv 形式的数据,我想将它插入到 hbase 中,问题是每个字段都用“'”(单引号)括起来。 如何在导入命令中提供它: hbase org.apache.hadoop.hbase.mapred
我正在阅读文档:https://docs.flutter.io/flutter/widgets/BuildContext-class.html This can lead to some tricky
同学们,我有这样一个问题:1. 在我的第一个类中,我有 public class parseYouTubeAndYahoo extends AsyncTask> 解析来自互联网的数据。但是我需要从另一
Akka 文档记录了使用 Props 的危险变体: // NOT RECOMMENDED within another actor: // encourages to close over enclo
我创建了一个 Eclipse 插件,可以在按下快捷键时打印输出选择的对象。我已经能够做到这一点,但我还想在日志中添加当前方法和当前类名称。我不知道如何进一步进行。我尝试搜索面包屑 API,但无法从我的
我是一名优秀的程序员,十分优秀!