IntelliJ(前回のバージョン)でアプリケーションを実行すると、最後のタスクが永遠に停止しています。 実際に私はデバッグしようとしましたが、fetchRegisterCourseList()にハングアップしています。 進捗インジケータがあり、特定のデータが決して取得されないため、そのぶら下がりがわかります。 一方、私のアプリケーションをjarファイルにパッケージ化して通常実行すると、何も問題なく動作します。タスクがハングしています
これはIntelliJまたはコードに関連するバグですか?
AuthController:
... // previous tasks
Task<List<Course>> parseGradesTask = new Task<List<Course>>() {
@Override
public List<Course> call() {
return studentParser.parseStudentGrades();
}
};
Task<HashMap<String, String>> parseRegTask = new Task<HashMap<String, String>>() {
@Override
public HashMap<String, String> call() {
return studentParser.parseStudentRegistration();
}
};
parseGradesTask.setOnSucceeded(e -> {
serializeService.serializeCourses(parseGradesTask.getValue());
progressIndicator.setProgress(0.6);
});
parseRegTask.setOnSucceeded(e -> {
// it is hanging at this line:
List<Course> regList = serializeService.fetchRegisterCourseList(parseGradesTask.getValue(), parseRegTask.getValue());
serializeService.serializeRegister(regList);
updateMainComponents();
});
ExecutorService es = Executors.newSingleThreadExecutor();
es.submit(parseInfoTask);
es.submit(parseGradesTask);
es.submit(parseStatsTask);
es.submit(parseRegTask);
es.shutdown();
private void updateMainComponents() {
MainController.getInstance().updateAllViewComponents();
if (preferenceService.getPreferences().getPrefSyncEnabled()) {
SyncScheduler.getInstance().stopScheduler();
SyncScheduler.getInstance().startSyncScheduler(preferenceService.getPreferences().getPrefSyncTime());
}
dialogStage.close(); //close this window
}
serializeService:
public List<Course> fetchRegisterCourseList(List<Course> courseList, HashMap<String, String> courseIdList) {
List<Course> courseRegList = new ArrayList<>();
Iterator it = courseIdList.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next();
courseRegList.addAll(courseList.stream().filter(course ->
course.getCourseId().equals(pair.getKey()) && course.getCourseTitle().equals(pair.getValue()))
.collect(Collectors.toList()));
it.remove(); // avoids a ConcurrentModificationException
}
return courseRegList;
}
は、これらすべての文が何をしているかIDKが、高価なタスクは 'Task'sの' call'方法で行う必要があります。私はあなたが 'onSucceeded'ハンドラから結果を得るのを見ません。メソッド名から推測すると、 'parseRegTask'の' onSucceeded'ハンドラで実行されるのは 'updateMainComponents();'だけです。 – fabian
ありがとうファビアン。それは私の問題を解決したようです。あなたが望むなら、この質問を閉じるための答えとしてそれを書くことができます。私はそれがなぜ起こっていたのか(なぜなら、仮説的にさえ)を知りたいのです。 – pror21
IntelliJのバグではありません。最初に、最後に、そしていつも自分を疑ってください。 – duffymo