Wyjatek tworzony przez invokacje metody w momencie anulowania Future

0

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 ?

0

sory zapomnialem
wywala to:
java.lang.reflect.InvocationTargetException

...

0

Szklana kula mówi że pewnie leci jakiś wyjątek "w środku" a potem jest mapowany na ten ITE. Zapnij tam debuger i zobacz co się dokładnie dzieje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1