Witajcie.
Mam o to taki problem. Stworzyłem funkcyjny interfejs, który przekazuję jako fes parametry do metody. W klasie gdzie wykonuję tą metodę zaimplementowałem dwa takie interfejsy. Jednak mam problem gdy zdeklaruję je w ten sposób
private RunProcess runLastProcess = processFinished -> {
Process process = processQueue.poll();
waitForProcessToFinish(process.getPhaseProcessor());
int lastProcessFinished = processFinished + process.getPhaseProcessor();
process.setFinishTime(lastProcessFinished);
System.out.println(ANSI_GREEN + process);
return processFinished;
};
private RunProcess runProcess = processFinished -> {
Process process = processQueue.poll();
waitForProcessToFinish(process.getPhaseProcessor());
processFinished += processFinished + process.getPhaseProcessor();
process.setFinishTime(processFinished);
System.out.println(ANSI_GREEN + process);
return processFinished;
};
a następnie wywołuję moją metodę
int allProcessFinished = runAlgorithm(runProcess, runLastProcess);
dostaję error
Exception in thread "algorithms.FCFS" java.lang.NullPointerException
Jednak gdy zrobię to w ten sposób
int allProcessFinished = runAlgorithm(processFinished1 -> {
Process process = processQueue.poll();
waitForProcessToFinish(process.getPhaseProcessor());
processFinished1 += processFinished1 + process.getPhaseProcessor();
process.setFinishTime(processFinished1);
System.out.println(ANSI_GREEN + process);
return processFinished1;
}, processFinished -> {
Process process = processQueue.poll();
waitForProcessToFinish(process.getPhaseProcessor());
int lastProcessFinished = processFinished + process.getPhaseProcessor();
process.setFinishTime(lastProcessFinished);
System.out.println(ANSI_GREEN + process);
return 0;
});
To działa. Nie bardzo rozumiem czemu w pierwszym przypadku dostaję te nulle, a tak wygląda metoda runAlgorithm.
int runAlgorithm(RunProcess runProcess, RunProcess runLastProcess) {
int doneProcesses = 0;
int processesFinishTime = 0;
while (doneProcesses != NUMBER_OF_PROCESSES) {
if (processQueue.size() != 0) {
if (doneProcesses == (NUMBER_OF_PROCESSES - 1)) {
runLastProcess.run(processesFinishTime);
} else {
processesFinishTime = runProcess.run(processesFinishTime);
}
doneProcesses++;
}
}
return processesFinishTime;
}