public final void sendAdvertisement(final Advertisement advertisment, int delay, final int repetitions){
final ScheduledFuture exec = executor.scheduleAtFixedRate(//<< initialized on this line
new Runnable(){
int totalSends = 0;
public void run(){
//do stuff here
if(++totalSends >= repetitions) exec.cancel(true); //<< here is says exec might not be initialized
}
},
0, delay, TimeUnit.MILLISECONDS);
}
Если это невозможно, можете ли вы предложить лучший способ сделать это? Я не смог найти метод для этого в ScheduledThreadPoolExecutor. в основном то, что я пытаюсь сделать, это запустить этот код 3 раза, а затем отменить «таймер». Вероятно, я мог бы использовать Swing Timer, но я не хочу, так как он используется для других вещей.Ошибка «инициализации переменной»
Это говорит в комментариях, но это ошибка:
%PATH%Discovery.java:148: variable exec might not have been initialized
if(++totalSends >= repetitions) exec.cancel(true);
final ScheduledFeature exec = null; exec = executor.sche ... и т. д. Затем в вашем операторе if (++ totalSends) добавьте вторичный оператор if (exec! = null) {exec.cancel (true);} ??? –
Это невозможно, вы не можете изменить конечную переменную после ее инициализации, даже до нулевого права? – WalterM
Куда вы правы. Сделайте это не окончательным. –