Domanda

Uso Mathematica con JLink per un progetto di ricerca, che prevede molti calcoli. Mathematica viene utilizzato come frontend grafico per l'immissione dei parametri e la successiva rappresentazione dei risultati. Gli algoritmi effettivi si trovano nelle classi Java, che vengono chiamate tramite JLink.

Il collegamento " " è un'istanza denominata evalFrontend. Alla pressione di un pulsante, viene eseguita una cosa del genere:

 RunEvaluation[] := (
  success = False;
  results = evalFrontend@run[];
  eval = evalFrontend@getEvaluation[];
  success = eval@success[];
  Return[results];
  )

Se il calcolo richiede più di 10 secondi, viene visualizzata una finestra di dialogo:

  

Annulla dinamica: il kernel non risponde a una valutazione dinamica. Puoi scegliere di interrompere e riavviare il kernel o continuare ad aspettare. [..]

Mentre è visualizzato, Java è ancora in esecuzione. Tuttavia, dopo qualche altro tempo, viene visualizzata un'altra finestra di dialogo:

  

Disabilita dinamico: su o più oggetti dinamici impiegano troppo tempo per terminare la valutazione. È possibile disabilitare ulteriori valutazioni dinamiche o continuare ad attendere [...]

Quando appare, il processo Java è terminato.

Come posso evitare che ciò accada? Eventuali suggerimenti sarebbero apprezzati.

È stato utile?

Soluzione

Prova a utilizzare Aggiornamento sincrono - > False .

Vedi anche questo link .

Altri suggerimenti

Se la tua IU ti fa clic su un pulsante per avviare il calcolo, usa il metodo - > & Quot; coda " opzione per Button:

Button["Start Chugging", RunComputation[], Method -> "Queued"]

La finestra di dialogo Disabilita dinamica non verrà mai visualizzata e si verificheranno comunque aggiornamenti dinamici, in modo da poter monitorare l'avanzamento del calcolo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top