Hi Jihong,
Perhaps a more appropriate place to report this gwt-fabridge bug would be on
the project Issue Tracker. I'm sure the developers behind the project would
be happy to be notified about a potentially critical issue.

http://code.google.com/p/gwt-fabridge/issues/list

Hope that helps,
-Sumit Chandel

On Thu, Feb 5, 2009 at 6:45 AM, Charlie Collins
<[email protected]>wrote:

>
> You missed my point there. I guess I should have said I don't know OR
> care what gwt-fabridge is, but if you want help with it, you might as
> on a forum that is relevant to it?
>
> On Feb 4, 1:37 pm, Jihong <[email protected]> wrote:
> > gwt-fabridge is a utility for gwt to access adobe swf file. See the
> > following pagehttp://code.google.com/p/gwt-fabridge/
> >
> > On Feb 4, 5:59 am, Charlie Collins <[email protected]> wrote:
> >
> > > I don't know whatgwt-fabridgeis, but maybe that project has it's own
> > > support list you can use for issues such as this?  Not sure you will
> > > get much response here.
> >
> > > On Feb 3, 4:00 pm, "Jihong Liu" <[email protected]> wrote:
> >
> > > > Hi. I have a problem forgwt-fabridge. I think it may be a critical
> > > > issue forgwt-fabridge.
> >
> > > > If a swf widget is added into a panel, and then add the panel into a
> > > > container. And then remove the panel from the container, and then add
> > > > the panel back into the container. Then the Null pointer error will
> > > > occur at onInitialization()caused by the swf widget. I did a test
> using
> > > > the FABridgeDemo. In the FABridgeDemo, I added a button for removing
> the
> > > > swf widget.
> >
> > > > When start the program, first click the "Add new SWF", and everything
> is
> > > > ok. Then click the "Remove SWF", then the swf is removed. Then click
> the
> > > > "Add new SWF" again, then an error will happen.
> >
> > > > I have tried many ways, the only way to make it work is to create the
> > > > swf widge again and using a different name if the widget has been
> > > > removed. For example:
> >
> > > >     java.util.Date date = new java.util.Date();
> >
> > > >     swfWidget = new
> > > > SWFABridgeWidget("app.swf",400,400,"example"+date.getTime());
> >
> > > > But it is not good at all. And the behavior is not the same as other
> > > > regular gwt widgets. For other widgets, after they are put in a
> panel.
> > > > Then you can add/drop this panel into/from a container many times
> > > > without re-create the inside widgets.
> >
> > > > I am really frustrated about this problem. Based on user's selection
> we
> > > > will add different panels into a container for display. It is really
> > > > painful if we have to create the swf widgets again if the panel has
> been
> > > > dropped from the container once.
> >
> > > > I don't know whether the following code in
> > > > pl.rmalinowski.gwt2swf.client.ui.SWFWidge causes problem or not.
> >
> > > > protected void onUnload() {
> >
> > > >     // GWT.log("onUnload", null);
> >
> > > >     getElement().removeChild(DOM.getFirstChild(getElement()));
> >
> > > >     isSWFInjected = false;
> >
> > > >     super.onUnload();
> >
> > > >   }
> >
> > > > The statement:
> getElement().removeChild(DOM.getFirstChild(getElement()))
> > > > removes the child from the widget. Thus after a swfwidget is removed
> > > > from a panel, and then add the swf back, no child there.
> >
> > > > Following is the code in com.google.gwt.user.client.ui.ComplexPanel
> >
> > > > @Override
> >
> > > >   public boolean remove(Widget w) {
> >
> > > >     // Validate.
> >
> > > >     if (w.getParent() != this) {
> >
> > > >       return false;
> >
> > > >     }
> >
> > > >     // Orphan.
> >
> > > >     orphan(w);
> >
> > > >     // Physical detach.
> >
> > > >     Element elem = w.getElement();
> >
> > > >     DOM.removeChild(DOM.getParent(elem), elem);
> >
> > > >     // Logical detach.
> >
> > > >     getChildren().remove(w);
> >
> > > >     return true;
> >
> > > >   }
> >
> > > > It sounds to me that the different between two programs is that in
> > > > ComplexPanel, it removes the widget's element only, but in SWFWidge,
> it
> > > > removes the child of the widget's element.
> >
> > > > Thank you very much!
> >
> > > > Jihong Liu
> >
> > > > Following is the source code which causes problem
> >
> > > > package com.satmetrix.swfTest.client;
> >
> > > > import org.argunet.gwt.fabridge.client.SWFABridgeWidget;
> >
> > > > import org.argunet.gwt.fabridge.client.bridge.BridgeObject;
> >
> > > > import org.argunet.gwt.fabridge.client.bridge.BridgeParameter;
> >
> > > > import org.argunet.gwt.fabridge.client.bridge.BridgeParameterObject;
> >
> > > > import
> org.argunet.gwt.fabridge.client.events.IInitializationListener;
> >
> > > > import org.argunet.gwt.fabridge.client.events.ISWFListener;
> >
> > > > import org.argunet.gwt.fabridge.client.utils.JSNIUtils;
> >
> > > > import com.google.gwt.core.client.EntryPoint;
> >
> > > > import com.google.gwt.core.client.JavaScriptObject;
> >
> > > > import com.google.gwt.user.client.Window;
> >
> > > > import com.google.gwt.user.client.ui.Button;
> >
> > > > import com.google.gwt.user.client.ui.ClickListener;
> >
> > > > import com.google.gwt.user.client.ui.Label;
> >
> > > > import com.google.gwt.user.client.ui.RootPanel;
> >
> > > > import com.google.gwt.user.client.ui.Widget;
> >
> > > > public class FABridgeDemo implements EntryPoint,
> IInitializationListener
> > > > {
> >
> > > >       private final Button addNewSwf = new Button("Add new SWF");
> >
> > > >       private final Button removeSwf = new Button("Remove SWF");
> >
> > > >       private final Button setCheckBox = new Button("Set Checkbox
> > > > property");
> >
> > > >       private final Label sliderLabel = new Label("Slider Label");
> >
> > > >       private SWFABridgeWidget swfWidget=null;
> >
> > > >       private final Button createDataGrid = new Button("Create Data
> > > > Grid");
> >
> > > >       /**
> >
> > > >        * This is the entry point method.
> >
> > > >        */
> >
> > > >       public void onModuleLoad() {
> >
> > > >             RootPanel.get().add(addNewSwf);
> >
> > > >             RootPanel.get().add(removeSwf);
> >
> > > >             RootPanel.get().add(setCheckBox);
> >
> > > >             RootPanel.get().add(sliderLabel);
> >
> > > >             RootPanel.get().add(createDataGrid);
> >
> > > >             // adds new swfWidget to rootPanel
> >
> > > >             addNewSwf.addClickListener(new ClickListener() {
> >
> > > >                   public void onClick(Widget arg0) {
> >
> > > >                         // set bridge name for FABridge
> >
> > > >                       if (swfWidget==null) {
> >
> > > >                           swfWidget = new
> > > > SWFABridgeWidget("app.swf",400,400,"example");
> >
> > > >                         // add initialization listener
> >
> > > > swfWidget.addInitializationListener(FABridgeDemo.this);
> >
> > > >                       }
> >
> > > >                         // add swfWidget to RootPanel
> >
> > > >                         RootPanel.get().add(swfWidget);
> >
> > > >                         //show swf movie
> >
> > > >                         swfWidget.show();
> >
> > > >                   }
> >
> > > >             });
> >
> > > >             removeSwf.addClickListener(new ClickListener() {
> >
> > > >             public void onClick(Widget arg0) {
> >
> > > >               RootPanel.get().remove(swfWidget);
> >
> > > >             }
> >
> > > >         });
> >
> > > >             // changes checkbox status in swfWidget
> >
> > > >             setCheckBox.addClickListener(new ClickListener() {
> >
> > > >                   public void onClick(Widget arg0) {
> >
> > > >                         // get check box
> >
> > > >                         BridgeObject check =
> > > > swfWidget.root().getObject("check");
> >
> > > >                         // get check box status
> >
> > > >                         Boolean status = new
> > > > Boolean(check.getProperty("selected").getContent().toString());
> >
> > > >                         // change check box status
> >
> > > >                         check.setProperty("selected",
> > > > !status.booleanValue());
> >
> > > >                   }
> >
> > > >             });
> >
> > > >             // creates new DataGrid in swfWidget
> >
> > > >             createDataGrid.addClickListener(new ClickListener() {
> >
> > > >                   public void onClick(Widget arg0) {
> >
> > > >                         BridgeObject flexApp = swfWidget.root();
> >
> > > >                         // create new data grid
> >
> > > >                         BridgeObject grid =
> > > > swfWidget.create("mx.controls.DataGrid");
> >
> > > >                         grid.addRef();
> >
> > > >                         // create first column
> >
> > > >                         BridgeObject col1 =
> > > > swfWidget.create("mx.controls.dataGridClasses.DataGridColumn");
> >
> > > >                         col1.addRef();
> >
> > > >                         col1.setProperty("dataField", "apples");
> >
> > > >                         // create second column
> >
> > > >                         BridgeObject col2 =
> > > > swfWidget.create("mx.controls.dataGridClasses.DataGridColumn");
> >
> > > >                         col2.addRef();
> >
> > > >                         col2.setProperty("dataField", "oranges");
> >
> > > >                         // add columns to data grid
> >
> > > >                         JavaScriptObject jsArray = JSNIUtils
> >
> > > >                                     .convertArray(new
> JavaScriptObject[]
> > > > {
> >
> > > >                                                 col1.getJSContent(),
> > > > col2.getJSContent() });
> >
> > > >                         grid.setProperty("columns", jsArray);
> >
> > > >                         grid.setProperty("width", 300);
> >
> > > >                         // create first row
> >
> > > >                         BridgeParameterObject row1 = new
> > > > BridgeParameterObject();
> >
> > > >                         row1.addProperty("apples", 12);
> >
> > > >                         row1.addProperty("oranges", 32);
> >
> > > >                         // create second row
> >
> > > >                         BridgeParameterObject row2 = new
> > > > BridgeParameterObject();
> >
> > > >                         row2.addProperty("apples", 15);
> >
> > > >                         row2.addProperty("oranges", 24);
> >
> > > >                         // set dataProvider
> >
> > > >
> >
> > ...
> >
> > read more ยป
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to