小编Pea*_*nín的帖子

Java:如何更新Runnable lambda中使用的变量?

我有以下代码.我ScheduledExecuterService在我的scheduleNumbers()方法中使用一个指定的毫秒数显示一系列随机数.但是,我似乎无法更新lambda curNumber中显示的内容,setNumber因为"从lambda表达式引用的局部变量必须是最终的或有效的最终"(非常有用).没有使用线程有没有办法解决这个问题?完整代码位于下面的pastebin链接中.

private void printNumbers(int[] randomNumbers) {
    int speed = DIFF_TIMES[difficulty.getSelectedIndex()];
    int amount = BASE_AMOUNT + currentScore;
    answerField.setEditable(false);
    scheduleNumbers(randomNumbers, speed, amount);
    currentNumberLab.setText("");
    answerField.setEditable(true);
}

public void scheduleNumbers(int[] randomNumbers, int speed, int amount) {
    int curNumber = 0;
    long initialDelay = 1000;
    final Runnable setNumber = () -> {
        currentNumberLab.setText(Integer.toString(randomNumbers[curNumber]));
        System.out.println("Set to " + randomNumbers[curNumber]);
    };
    final ScheduledFuture<?> setNumberHandle = scheduler.scheduleAtFixedRate(setNumber, initialDelay, speed, MILLISECONDS);
    scheduler.schedule(() -> {
        setNumberHandle.cancel(true);
    }, (speed*amount)+initialDelay, MILLISECONDS);
}
Run Code Online (Sandbox Code Playgroud)

完整代码. …

java lambda scheduledexecutorservice

0
推荐指数
1
解决办法
246
查看次数

标签 统计

java ×1

lambda ×1

scheduledexecutorservice ×1