Sprawa wyglada tak:
wywoluje odpowiednia metode dzieki refleksji i nacisnieciu actionListenerowi:
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
try {
Method m = this.getClass().getMethod("task"+cmd);
m.invoke(this);
}catch(Exception ex){
ex.printStackTrace();
}
}
nastepnie startujace odpowiednie zadanie:
Map<Integer,Future<Integer>> map = new HashMap<>();
ExecutorService exec = Executors.newCachedThreadPool();
int k = 0;
public void taskStart() {
try {
consol.append("Task " + k + " submitted\n");
map.put(k, exec.submit( new Task(k) ));
list.addElement("Task no."+k);
k++;
} catch(RejectedExecutionException exc) {
consol.append("Execution rejected\n");
}
}
public void taskStop(){
int l = taskChooser.getSelectedValue().length()-1;
int q = taskChooser.getSelectedIndex();
char sel = taskChooser.getSelectedValue().charAt(l);
System.out.println(sel);
Future<Integer> task = map.get(sel);
task.cancel(true); <----- wywoluje blad w invokacji metody m !!!
list.removeElement(q);
}
ktore wygladaja tak:
class Task implements Callable<Integer>{
private int id;
public Task(int id){
this.id = id;
}
@Override
public Integer call() throws Exception {
int sum = 0;
for(int i=1; i<=1000; i++){
if(Thread.currentThread().isInterrupted()){
return null;
}
sum++;
consol.append("Task "+id+" count: "+sum+"\n");
Thread.sleep(1000);
}
consol.append("Task " + k + " end\n");
return sum;
}
}
Dlaczego wywala mi blad przy invokacji metody. Co ma Future do invokacji metody ?