Ah, right. Actually, if you don't rethrow the exception, the thread won't terminate...
Edward On 6/22/11 7:02 AM, Colin Enticott wrote:
It might be best to re-throw the exception in case the method is
expanded on. That is:
} catch (Exception e) {
if (!(e instanceof TerminateProcessExeption)) {
e.printStackTrace();
throw new IllegalActionException(this, e, e.getMessage());
}
else
throw e;
}
Colin
On 22 June 2011 23:23, Edward A. Lee <[email protected]
<mailto:[email protected]>> wrote:
The offending lines are these:
} catch (Exception e) {
e.printStackTrace();
throw new
IllegalActionException(e.__getMessage());
}
The issue is that in PN, the fire() method is invoked in an infinite
loop in its own thread. The get() method blocks until there is input
available. When the PN director detects that there are no more
tokens to process, it causes to get() to throw a
TerminateProcessException. It would not work for get() to just
return, because then the infinite loop would continue and the thread
would never terminate.
You could change this to:
} catch (Exception e) {
if (!(e instanceof TerminateProcessExeption)) {
e.printStackTrace();
throw new IllegalActionException(e.__getMessage());
}
}
Note further that it would be better to replace
throw new IllegalActionException(e.__getMessage());
with
throw new IllegalActionException(this, e, e.getMessage());
This will cause the offending actor to be highlighted, and the chain
of exception stack traces to be shown. It makes it unnecessary to
do this:
e.printStackTrace();
Edward
On 6/22/11 1:07 AM, Vincenzo Forchi wrote:
Hi Christopher,
I think I'm doing some weird mistake, but I don't understand why the
other actors I wrote work. Anyway, here's the (stripped down)
actor that
doesn't work and the model.
Cheers,
Vincenzo
On 21/06/2011 17:32, Christopher Brooks wrote:
Hi Vincenzo,
Do you have a small test actor and sample model?
_Christopher
On 6/21/11 8:05 AM, Vincenzo Forchi wrote:
Hi Edward,
On 21/06/2011 16:53, Edward A. Lee wrote:
Something's fishy here.
Such a model should work fine in PN.
Note that hasToken() _alaways_ returns true in PN.
That's good to know, I completely missed that
The get() method blocks when there is no input.
Apparently in this case it doesn't, but why is the fire even
triggered in the first place?
Looks like something is terminating the threads
using a TerminateProcessException. How is your model
supposed to be stopped?
When all the tokens have been consumed, which works for
most of my
actors with the PN and for all
of them with the DDF.
Cheers,
Vincenzo
_______________________________________________
Kepler-users mailing list
[email protected] <mailto:[email protected]>
http://lists.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users
<<attachment: eal.vcf>>
_______________________________________________ Kepler-users mailing list [email protected] http://lists.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users

