On Thu, 20 Nov 2003, Patrick LeBoutillier wrote: > suggestions
I had a long think about this when I couldn't get it to work and came to roughly the same conclusions as you. Here's what I came up with, just incase you're still looking for feedback. 1) The simpliest implementation is a MainLoop object that has a mainloop method that is called from perl and does nothing but waiting on a queue. Waiting could probably be achieved by using wait and notifiy and every time MainLoop's addThingy method is called it adds the passed thingy to the end of the queue and notifies the object that the mainloop method is waiting on. The thingy you're adding to the queue could simply hold an Object, a Method, and a array of arguemtents which could then be invoked by mainloop when it wakes up by calling thingy.getMethod().invoke(thingy.getObject(), thingy.getArgs()) 2) It'd be nice to write things like ActionListenerProxy that you construct by passing in the mainloop and the object you want the event proxied to. For example, ActionListenerProxy would look something like this (warning totally untried code that I wrote directly in my mail client and hence am lost without syntax highlighting): package ActionListenerProxy { Mainloop mainloop; ActionListener actionListener public ActionListenerProxy(Mainloop mainloop, ActionListener actionListener) { this.mainloop = mainloop; this.actionListener = actionListener; } void actionPerformed(ActionEvent e) { Class actionEventClass = e.getClass(); Class argTypes[] = { actionEventClass }; Object args[] = { e }; // get the "actionPerformed" method for our class Method actionPerformedMethod = actionListener.getClass() .getMethod("actionPerformed",argTypes); // schedule a thingy to be called by the mainloop mainloop.addThingy( new Thingy(actionListener, actionPerformedMethod, args) ); } } Mark. -- #!/usr/bin/perl -T use strict; use warnings; print q{Mark Fowler, [EMAIL PROTECTED], http://twoshortplanks.com/};