Typical - I just hit send and then I realise I can create my own Graphics 2D
sub-class and just delegate to a Graphics2D created elsewhere, or to a SWT
graphics context. I'll have a play with this later, but any ideas about the
instantiation problem?

Thanks,
Chris



2009/11/15 Christopher Brind <[email protected]>

> Hi,
>
> I don't want to get people too excited, but I'm working on an Eclipse
> plugin for Pivot.  At the moment it simply recognises WTKX as an XML format,
> and I've extended the XML editor to add a new page called 'Preview'.
>
> My original plan was use the SWT AWT bridge and some very simple code to
> render the WTKX.  That is, I don't render the the contents of the WTKX using
> Pivot code, I simply call paint(Graphics2D) directly.
>
> However, I've hit a couple of problems:
>
> 1) SWT AWT Bridge doesn't work on Mac!
>
> The problem is also described here, ignoring the fact that the original
> poster isn't actually using the SWT/AWT bridge - he has come across the same
> problem as me, that something in Eclipse basically breaks AWT.  In his case
> he can run it on the command line, but when it comes to using the SWT/AWT
> bridge, this has fail written all over it.
>
> I'm looking in to this in more detail, but I wonder if it would be worth
> abstracting the graphics context so that it isn't AWT specific?  Perhaps a
> lot of work, but it would mean I could implement a pure SWT version for
> rendering in Eclipse.
>
>
>
> 2) Instantiation problems when deserialising the WTKX
>
> Here's my rendering code, but in a stand alone way outside of Eclipse (I
> got here by trying to debug the SWT/AWT problem) :
>
> public static void main(String[] args) throws Exception {
>
>
>  // Frame frame = new Frame();
>
> Properties props = System.getProperties();
>
> Iterator iter = props.keySet().iterator();
>
> while (iter.hasNext()) {
>
> String key = (String) iter.next();
>
> System.out.println(key + " : " + props.getProperty(key));
>
> }
>
>
>  JFrame frame = new JFrame();
>
> frame.setSize(800, 600);
>
> frame.setVisible(true);
>
>
>  JApplet applet = new JApplet();
>
> applet.setSize(800, 600);
>
> frame.add(applet);
>
> frame.setVisible(true);
>
>
>  WTKXSerializer wtkx = new WTKXSerializer();
>
> Object o = wtkx.readObject(new FileInputStream("assets/template.wtkx"));
>
>
>  Window window = null;
>
> if (o instanceof Window) {
>
> window = (Window) o;
>
> } else {
>
> window = new Window();
>
>
>  Component c = (Component) o;
>
> c.setSize(applet.getWidth(), applet.getHeight());
>
>
>  window.add(c);
>
> }
>
>
>  window.setSize(applet.getWidth(), applet.getHeight());
>
> window.validate();
>
>
>  Graphics2D g2d = (Graphics2D) applet.getGraphics();
>
> window.paint(g2d);
>
>
>  }
>
> Similar code will be used inside the Eclipse plugin to render the WTKX in
> the Eclipse editor - as you can see, it's a render-only process, it doesn't
> handle events or anything like that.
>
> Now this actually works OK for the given WTKX:
>
> <BoxPane xmlns="org.apache.pivot.wtk"
>
>     xmlns:wtkx="http://pivot.apache.org/wtkx";>
>
>          <Label wtkx:id="label" text="Enter your name: "/>
>
>         <TextInput preferredWidth="200" />
>
>
>
> </BoxPane>
>
> But, if I drop in a Button, like this:
>
> <BoxPane xmlns="org.apache.pivot.wtk"
>
>     xmlns:wtkx="http://pivot.apache.org/wtkx";>
>
>          <Label wtkx:id="label" text="Enter your name: "/>
>
>         <TextInput preferredWidth="200" />
>
>         <Button label="Submit" />
>
>
>
> </BoxPane>
>
> I get some exceptions:
>
> An error occurred while processing  element <BoxPane> starting at line
> number 6:
> org.apache.pivot.serialization.SerializationException:
> java.lang.InstantiationException
> at
> org.apache.pivot.wtkx.WTKXSerializer.processStartElement(WTKXSerializer.java:585)
>  at
> org.apache.pivot.wtkx.WTKXSerializer.readObject(WTKXSerializer.java:426)
> at
> org.apache.pivot.wtkxeditor.editors.WTKXPreviewer.main(WTKXPreviewer.java:37)
> Caused by: java.lang.InstantiationException
> at
> sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
>  at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
> at java.lang.Class.newInstance0(Class.java:355)
>  at java.lang.Class.newInstance(Class.java:308)
> at
> org.apache.pivot.wtkx.WTKXSerializer.processStartElement(WTKXSerializer.java:583)
>  ... 2 more
> Exception in thread "main"
> org.apache.pivot.serialization.SerializationException:
> java.lang.InstantiationException
>  at
> org.apache.pivot.wtkx.WTKXSerializer.processStartElement(WTKXSerializer.java:585)
> at org.apache.pivot.wtkx.WTKXSerializer.readObject(WTKXSerializer.java:426)
>  at
> org.apache.pivot.wtkxeditor.editors.WTKXPreviewer.main(WTKXPreviewer.java:37)
> Caused by: java.lang.InstantiationException
> at
> sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
>  at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
> at java.lang.Class.newInstance0(Class.java:355)
>  at java.lang.Class.newInstance(Class.java:308)
> at
> org.apache.pivot.wtkx.WTKXSerializer.processStartElement(WTKXSerializer.java:583)
>  ... 2 more
>
>
> I realise my circumventing the usual Pivot lifecycle might have something
> to do with it, so any ideas?
>
> If I can get around problem #2 somehow I think I can still produce an alpha
> version Eclipse plugin that will work on Windows/Linux, just not Mac =(  but
> like I say - being able to implement a pure SWT graphics context would get
> around that problem.
>
> Cheers,
> Chris
>
>
>
>

Reply via email to