[akabana-user:105] Re: <S2Flex2>S2Flex2を使用しているswfをmx.moduleを使用してアンロードした際、処理を実行すると例外がはっせいする。
kondo
[E-MAIL ADDRESS DELETED]
2007年 3月 8日 (木) 23:07:13 JST
近藤(nobu)です。
s2flex2-components.swcはコンパイルし直していません。
環境は、EclipseからDolteng.0.17.0をダウンロードしただけです。
そういえば、S2Flex2は
s2-flex2-1.0.1-SNAPSHOT.jar
s2-flex2-tiger-1.0.0.jar
です。S2Flex2のバージョンを書いておくべきでしたね。申し訳ないです。
Daichi Shinozaki wrote:
> 篠崎と申します。
>
> ちょっと気になったのですが、
>
> s2flex2-components.swc は、Flex 2.0.1でコンパイルし直していますか?
>
> --kondo<[E-MAIL ADDRESS DELETED]> wrote:
>> 近藤(nobu)です。
>>
>> 長いタイトルですみません。m( _ _ )m
>> しかもこの後長文で更にすみません。m( _ _ )m
>>
>> S2Flex2を使用してDBから情報を取得、一覧表示するアプリを作っています。
>> ただ、今回、そのアプリをモジュール(mx.module)にして、他のアプリ
>> (こちらはmx.application)から呼び出させています。
>> この時に、S2Flex2から(だと思う)例外が発生しています。
>>
>> ■概要
>> 1.アプリA、モジュールBを作成。
>> 2.アプリAからモジュールBをロード。->ModuleLoader.loadModule()
>> 3.モジュールBで、DB参照->一覧表示を行う。(S2Flex2使用)
>> 4.アプリAからモジュールBをアンロード。->ModuleLoader.unloadModule()
>> 5.また、アプリAからモジュールBをロード。->ModuleLoader.loadModule()
>> 6.またモジュールBでDB参照->一覧表示を行おうとすると例外発生。
>>
>> ===================================================================
>> ■例外内容
>> TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッ
>> ドにアクセスすることはできません。
>> at mx.managers::CursorManager$/setBusyCursor()
>> at org.seasar.flex2.rpc.remoting::S2Flex2Service/::setupCursor()
>> at org.seasar.flex2.rpc.remoting::S2Flex2Service/::remoteCall()
>> at Function/http://adobe.com/AS3/2006/builtin::apply()
>> at
>> org.seasar.flex2.rpc.remoting::S2Flex2Service/http://www.adobe.com/2006/actionscript/flash/proxy::callProperty()
>> at demoapp.web.app01::App01Page/read()
>> at demoapp.web.app01::App01Page/readBtnOnClick()
>> ===================================================================
>>
>> なんか、setBusyCursor()内でエラーが発生している??ように見えます。
>>
>> 現在わかっていることは、
>> 1.unloadModule()を実行しなければこの現象は発生しない。
>> ※ただ、mx.ModuleはunloadModule()を使用しない場合、インスタンスを使い
>> まわすようで、前回の状態を保持したままLoadされる。
>> 2.SWFLoaderではこの問題は発生しない。
>> ※そもそもSWFLoaderにはunloadがない。(ガベコレ任せと信じます)
>>
>> SDKのソースを見てみると、flash.display.Loaderの生成・破棄をやってるので
>> 、このあたりが怪しいような・・・というところで力尽きました。unloadModule
>> で何か破棄されてしまっているのではないかと思うのですが・・・。
>>
>> 何かお分かりでしたら、アドバイスをお願い致します。
>>
>>
>> ■環境
>> Eclipse 3.2.1 + Language Pack
>> Flex Builder 2.0.1
>> Tomcat Plug-in
>> Dolteng 0.17.0
>> DbLuancher
>>
>>
>> 以下、ソース。(S2Flex2を利用しているところまで。Dolteng使用)
>> ===================================================================
>> ■Main.mxml(メイン)
>> <?xml version="1.0" encoding="utf-8"?>
>> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
>> layout="absolute" xmlns:ns1="demoapp.web.menu.*" height="360"
>> creationComplete="init()">
>> <mx:Script>
>> <![CDATA[
>> import mx.events.FlexEvent;
>> import mx.events.StateChangeEvent;
>> import mx.controls.Alert;
>> import mx.modules.ModuleLoader;
>>
>> private function init():void
>> {
>> // 初期表示は menu state
>> this.currentState = 'menu';
>> }
>>
>>
>> private function stateMenuOnEnterState(e:FlexEvent):void
>> {
>> }
>>
>>
>> private function stateMenuOnClick(e:MouseEvent):void
>> {
>>
>> <<ModuleLoader.loadModule()実行部>>
>>
>> ModuleLoader(this.states[1].overrides[2].target).url = "App01e.swf";
>> this.currentState='app'
>> }
>>
>>
>> private function stateAppOnEnterState(e:FlexEvent):void
>> {
>> // かなり無理やり・・・statesの特定のアプリケーションを取得できないもの
>> か・・・。
>> ModuleLoader(this.states[1].overrides[2].target).loadModule();
>> }
>>
>> private function stateAppOnClick(e:MouseEvent):void
>> {
>>
>> <<ModuleLoader.unloadModule()実行部>>
>>
>> ModuleLoader(this.states[1].overrides[2].target).unloadModule();
>> this.currentState = 'menu'
>> }
>> ]]>
>> </mx:Script>
>>
>>
>> <mx:states>
>> <mx:State name="menu" enterState="stateMenuOnEnterState(event)">
>> <mx:AddChild position="lastChild">
>> <mx:Button x="10" y="10" label="app" click="stateMenuOnClick(event)"/>
>> </mx:AddChild>
>> <mx:AddChild position="lastChild">
>> <ns1:MenuCmp x="10" y="40" width="463">
>> </ns1:MenuCmp>
>> </mx:AddChild>
>> </mx:State>
>> <mx:State name="app" enterState="stateAppOnEnterState(event)">
>> <mx:AddChild position="lastChild">
>> <mx:Button x="10" y="10" label="close" click="stateAppOnClick(event)"/>
>> </mx:AddChild>
>> <mx:AddChild position="lastChild">
>> </mx:AddChild>
>> <mx:AddChild position="lastChild">
>> <mx:ModuleLoader x="10" y="40" width="442" height="310" id="loader">
>> </mx:ModuleLoader>
>> </mx:AddChild>
>> </mx:State>
>> </mx:states>
>>
>>
>> </mx:Application>
>>
>> ■App01e.mxml(S2Flex2を使用しているアプリ。mx.moduleで作成)
>> <?xml version="1.0" encoding="utf-8"?>
>> <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" width="364"
>> height="264" xmlns:ns1="demoapp.web.app01.*">
>> <ns1:App01 width="100%" height="100%">
>> </ns1:App01>
>> </mx:Module>
>>
>>
>> ■App01.mxml(App01e.mxmlの実態(コンポーネント))
>> <?xml version="1.0" encoding="utf-8"?>
>> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="366"
>> height="262" xmlns:seasar="http://www.seasar.org/s2flex2/mxml"
>> xmlns:app01="demoapp.web.app01.*">
>> <seasar:S2Flex2Service id="service" destination="app01_app01Service"
>> showBusyCursor="true"/>
>> <app01:App01Page id="page"/>
>>
>> <mx:Button x="0" y="0" label="read" id="readBtn"/>
>>
>> <mx:DataGrid x="0" y="28" width="100%" height="234" id="dg">
>> <mx:columns>
>> <mx:DataGridColumn headerText="社員コード" dataField="empCd"/>
>> <mx:DataGridColumn headerText="社員名" dataField="empNm"/>
>> <mx:DataGridColumn headerText="部署コード" dataField="pstCd"/>
>> </mx:columns>
>> </mx:DataGrid>
>>
>> <mx:Label x="60" y="2" text="0" width="90" textAlign="right" id="recCnt"/>
>> <mx:Label x="158" y="2" text="件" width="22"/>
>>
>> </mx:Canvas>
>>
>>
>> ■App01Page.as(App01.mxmlのPageクラス)
>> package demoapp.web.app01 {
>>
>> import mx.controls.Alert;
>> import mx.rpc.AsyncToken;
>> import mx.rpc.events.ResultEvent;
>> import mx.rpc.events.FaultEvent;
>> import flash.events.Event;
>> import demoapp.entity.mst.MstEmployee;
>> import demoapp.web.AbstractPage;
>> import demoapp.web.AppMode;
>> import flash.events.MouseEvent;
>> import mx.collections.ArrayCollection;
>>
>> [Bindable]
>> public class App01Page extends AbstractPage {
>>
>> public var model: MstEmployee;
>>
>> public var appMode: int;
>>
>> override public function onCreationComplete(event: Event): void {
>> super.onCreationComplete(event);
>> setInitEntryMode();
>> }
>>
>> public function setInitEntryMode(): void {
>> appMode = AppMode.NEUTRAL;
>> model = null;
>> }
>>
>> public function setNewEntryMode(): void {
>> appMode = AppMode.NEW;
>> }
>>
>> public function setCorEntryMode(): void {
>> appMode = AppMode.COR;
>> }
>>
>> public function convertFormData(): void {
>> loadFormData(this.model);
>> }
>>
>> /**
>> * 情報取得メソッド
>> *
>> */
>> public function read():void {
>> remoteCall(service.read(), readOnSuccess, readOnFault);
>> }
>> public function readOnSuccess(e:ResultEvent, token:Object=null):void {
>> var mArray:Array = e.result as Array;
>> var mArrayCollection:ArrayCollection = new ArrayCollection(mArray);
>>
>> // 取得結果をDataGridにバインディング
>> document.dg.dataProvider = mArrayCollection;
>>
>> // 件数を表示
>> document.recCnt.text = mArrayCollection.length;
>> }
>> public function readOnFault(e:FaultEvent, token:Object=null):void {
>> Alert.show("read is fault");
>> }
>>
>> public function readBtnOnClick(e:MouseEvent):void
>> {
>> read();
>> }
>> }
>> }
>> ===================================================================
>>
>> _______________________________________________
>> akabana-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/akabana-user
>>
>>
>>
>
> _______________________________________________
> akabana-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/akabana-user
> __________ NOD32 2102 (20070308) 情報 __________
>
> このメールはNOD32によって検査済みです。
> http://canon-sol.jp
>
>
>
akabana-user メーリングリストの案内