Aide - Recherche - Membres - Calendrier
Version complète : Récupérer fichier appli-debug.html etc
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Flex
Atila67
Bonjour,

Dans mon dossier bin j'ai supprimer tous les fichiers... Problème je n'arrive plus à compiler mon appli.

Que dois-je faire ?

Merci
Fusion
CITATION(Atila67 @ Jul 5 2007, 03:44 PM) *
Dans mon dossier bin j'ai supprimer tous les fichiers... Problème je n'arrive plus à compiler mon appli.


S'il s'agit de Flex Builder, il a besoin des *.mxml et *.as pour compiler, pas des *.swf. Bizarre.
Redémarre un nouveau projet avec tes sources, et il devrait ne pas faire d'histoire.

Sinon... ligne de commande, mxmlc et tout le bazar, pour obtenir le swf, et tu le remets dans /bin, ni vu ni connu... mais pour en arriver là il faut que ce soit grave icon_razz.gif . La première solution devrait être largement suffisante.
Atila67
Je sais pas j'ai un Launch Failed

File not found:file:/C:/wamp/www/monsite/bin/monsite.html
Tonic
CITATION(Atila67 @ Jul 5 2007, 01:44 PM) *
Dans mon dossier bin j'ai supprimer tous les fichiers... Problème je n'arrive plus à compiler mon appli.


note pour la prochaine fois : ne pas supprimer les fichiers à la main, faire project->clean. Flex supprimera ce qu'il faut. icon_wink.gif
Atila67
J'ai recréé un projet du même nom mais quand je lance l'appli, dans ma fenetre ie c'est vide...
Tonic
Y a quoi dans les sources html?
Atila67
Ben le code de base... Ca me lance le loading puis après plus rien d'affiché.
Fusion
CITATION(Atila67 @ Jul 5 2007, 04:28 PM) *
Ben le code de base... Ca me lance le loading puis après plus rien d'affiché.


Est-ce que l'appli utilise des fichiers XML ou d'autres ressources externes? Elle est censée afficher quoi?
Atila67
Et dis toi tonic que j'ai fais un clean à l'instant et que mes fichiers debug.html ont disparu... Je reviens à la case départ.
Fusion
CITATION(Atila67 @ Jul 5 2007, 04:30 PM) *
Et dis toi tonic que j'ai fais un clean à l'instant et que mes fichiers debug.html ont disparu... Je reviens à la case départ.


Si tu peux et si ce n'est pas trop gros donne du code icon_razz.gif Oui je sais je ne jure que par le code mais ça me réussit bien icon_cool.gif
Tonic
CITATION(Atila67 @ Jul 5 2007, 02:30 PM) *
Et dis toi tonic que j'ai fais un clean à l'instant et que mes fichiers debug.html ont disparu... Je reviens à la case départ.



Si tu as fais un clean (sans supprimer au préalable d'autres fichiers), et que tu ne peux plus recompiler, c'est que le problème ne vient pas de là...
Atila67
Bon j'ai compris

Ma fonction getStatut me fait tout foirer.

Je suis dans la classe que tu m'as donné Tonic, celle de l'urlrequest.

Dans le completeHandler je traite ma chaine et je donne la valeur du statut à une chaine public. Problème je n'arrive pas à la récupérer dans mon appli pour la mettre dans une textbox.

private function completeHandler(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
trace("completeHandler: ");
var chaineretour:String = loader.data;
var indexstatut:int = chaineretour.search("statut='");

if(indexstatut>-1)
{
statut=chaineretour.substr(indexstatut+8,2);
}
}
Tonic
1 ) soit tu passes une référence de ton application à ta classe, et tu pourras ainsi depuis cette référence avoir accès à ta textbox.

2 ) soit tu dispatches des évènements de ta classe vers ton application, pour lui dire de mettre à jour le champ.
Atila67
CITATION(Tonic @ Jul 5 2007, 05:00 PM) *
1 ) soit tu passes une référence de ton application à ta classe, et tu pourras ainsi depuis cette référence avoir accès à ta textbox.

2 ) soit tu dispatches des évènements de ta classe vers ton application, pour lui dire de mettre à jour le champ.


Pour la 1 ) je fais comment ? Enfin le truc le plus simple à faire.
Tonic
Lorsque tu créé ton instance dans application, passe lui la référence à l'application (vu le scope ca devrait être this.

Si tu veux plus d'aide, poste le code de l'application.
Fusion
Quand tu appelles ta classe, tu lui donnes une référence vers ton application principale (représentée par this dans ce cas).

CODE
var cTemp:MaClasse = new MaClasse();

cTemp.appelant = this;




Et puis dans ta classe, tu déclares la variable correspondante.


CODE
public class MaClasse
{
public MaClasse()
{
public var appelant:Object;
}
}

cTemp.appelant = this;


Et voilà, "appelant" est devenue une référence vers ton application, fais-en ce que tu veux icon_razz.gif
Atila67
Je veux juste faire un txtstatut.text = statut;

CODE
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
    <![CDATA[
    import URLRequestExample.URLRequestExample;
    import flash.system.Security;
    Security.allowInsecureDomain("*");
    Security.allowDomain("*");
        
     private function test():void
     {
        var urlr : URLRequestExample = new URLRequestExample();
        urlr.appelant = this;
     }
    ]]>
</mx:Script>
    <mx:Panel width="536" height="387" layout="absolute" horizontalCenter="0" verticalCenter="10.5">
        <mx:List x="10" y="104"></mx:List>
        <mx:Label x="10" y="22" text="Liste"/>
        <mx:Button x="180" y="104" label="Requete" click="test()"/>
        <mx:Text x="237" y="78" text="Text" id="txtstatut"/>
        <mx:Label x="180" y="78" text="Status :"/>
    </mx:Panel>
    
</mx:Application>


CODE
package URLRequestExample
{
import flash.display.Sprite;
    import flash.events.*;
    import flash.net.*;
    import flash.system.Security;
    import mx.utils.StringUtil;
    Security.allowInsecureDomain("*");
    Security.allowDomain("*");
    
    public class URLRequestExample extends Sprite {

        public var appelant:Object;
        public var statut:String = "";
        public function URLRequestExample() {
            var loader:URLLoader = new URLLoader();
            configureListeners(loader);

            var request:URLRequest = new URLRequest("http://monsite.com/index.php?compteur=1");
            try {
                loader.load(request);
            } catch (error:Error) {
                trace("Unable to load requested document.");
            }
        }

        private function configureListeners(dispatcher:IEventDispatcher):void {
            dispatcher.addEventListener(Event.COMPLETE, completeHandler);
            dispatcher.addEventListener(Event.OPEN, openHandler);
            dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
            dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
            dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
            dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
        }

        private function completeHandler(event:Event):void {
            var loader:URLLoader = URLLoader(event.target);
            trace("completeHandlereeeeee: ");
            var chaineretour:String = loader.data;
            var indexstatut:int = chaineretour.search("status='");
            
            if(indexstatut!=-1)
            {
                statut=chaineretour.substr(indexstatut+8,2);
            }
            txtstatut.text = statut;
            trace("Statut de la connec"+statut);
        }
        
        private function openHandler(event:Event):void {
            trace("openHandler: " + event);
        }

        private function progressHandler(event:ProgressEvent):void {
            trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
        }

        private function securityErrorHandler(event:SecurityErrorEvent):void {
            trace("securityErrorHandler: " + event);
        }

        private function httpStatusHandler(event:HTTPStatusEvent):void {
            trace("httpStatusHandler: " + event);
        }

        private function ioErrorHandler(event:IOErrorEvent):void {
            trace("ioErrorHandler: " + event);
        }
    }
}

Tonic
avec this, tu lui passes une référence à l'application

donc dans application
CODE
var urlr : URLRequestExample = new URLRequestExample(this);


et une methode public aussi (où tu pourras avoir accès à ce que tu veux)
CODE
public function coucou():void
{
   trace("coucou")
}


dans la classe
CODE
private var ap : Application;
public function URLRequestExample(_ap:Application) {
  ap=_ap;
  ap.coucou();
}
Atila67
Tonic

Dans ma classe j'ai ça : deal.gif

CODE
private var ap : Application;
        public function URLRequestExample(_ap:Application) {
              ap=_ap;

Et dans mon appli :

CODE
private function test():void
     {
        var urlr : URLRequestExample = new URLRequestExample(this);
     }

+ la fonction coucou.

Pourquoi quand j'appelle cette fonction dans ma classe j'ai cette erreur :
1061: Appel à la méthode coucou peut-être non définie, via la référence de type static mx.core:Application.
Tonic
Bon, j'ai reprit le problème tranquillement.

J'ai été trop vite tout à l'heure en te proposant la solution, puisque Application est une instance static.

Voici une solution :

Classe TonApplication :
CODE
package
{
    import mx.core.Application;
    import mx.controls.TextArea;

    public class TonApplication extends Application
    {
        public function coucou():void
        {
            var ta : TextArea = this.getChildByName("ta") as TextArea;
            ta.text="coucou";    
        }
    }
}


mxml princpal :
CODE
<?xml version="1.0" encoding="utf-8"?>
<app:TonApplication
    xmlns:mx="http://www.adobe.com/2006/mxml"    
    creationComplete="init();"
    xmlns:app="*"
>
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            private function init():void
            {
                   var test : Test = new Test(this);                    
            }          
          
        ]]>
    </mx:Script>        
    <mx:TextArea id="ta"/>
</app:TonApplication>


classe test qui accede au textarea :
CODE
package
{
    public class Test
    {
        private var ap : TonApplication;
        public function Test(_ap:TonApplication)
        {
            ap=_ap;    
            ap.coucou();
        }
    }
}
Atila67
Merci Tonic,

Pour le ta.text j'ai une erreur : Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
at monApp/coucou()
Atila67
Help Tonic icon_neutral.gif
Tonic
J'ai essayé, ca fonctionne très bien chez moi.

Tu as repprit tout mon exemple?

Tu as bien donné l'id "ta" a ton textArea?


Atila67
Ben oui icon_eek.gif Tu peux m'envoyer le projet s'il te plait?
Tonic
Voilà
Atila67
merci
Atila67
Un dernier truc :

Pourquoi j'ai une erreur Tentative d'accès à la méthode inaccessible checkPlaylist, via la référence de type static Test.
Alors que j'ai rajouté une fonction ?


Dans mon mxml j'ai mis ça :
CODE
private function init():void
            {
                   var lancer : Test = new Test(this);
                   lancer.checkPlaylist();
                   trace("helo");             
            }


et dans la classe test :
CODE
private function checkPlaylist():void
        {
            ap.URLRequestExample("http://monsite.com/index.php?compteur=1");
                    }
Tonic
Déclare là public.
Atila67
Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
sur ta.text="test";
Atila67
C'est parce que j'ai mis le textarea dans un panel alors this.getChildByName("ta") est nul.

je dois faire comment pour y accéder?
Tonic
Tu dois d'abord récupérer de la même de façon ton panel (avec getChildByName), puis ensuite récupérer le ta qui est sûr ce panel (avec encore une getChildbyName).
Atila67
OK, je boucle sur mon tableau et j'ajoute ma valeur au datagrid avec compteur_dg.dataProvider[posi].Compteur= compteur;

Le truc c'est qu'il ne me remplit que la première ligne de mon datagrid. Mon posi++ marche j'ai fais un trace il avance bien et affiche la bonne valeur. icon_eek.gif
Atila67
Bon j'ai resolu ce prob. Juste un truc quand j'ai fais une copie du dossier bin sur mon bureau. Quand je lance l'appli, je récupère bien mon xml de site web, mais par contre je n'arrive pas a charger le statut des compteurs... Alors que si je le lance dans le bin ça marche direct icon_evil.gif
Atila67
Bon j'ai tracer mon eventHandler :

securityErrorHandler: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: Violation de la sécurité Sandbox : file:///C:/Users/Azz/Desktop/bin/test2.swf ne peut pas charger de données à partir de http://monsite.com/index.php?compteur=1

...

J'ai mis tout ça :

Security.allowInsecureDomain("*");
Security.allowDomain("*");
Security.loadPolicyFile("policy.xml");

Mais rien de passe.
Atila67
Mon appli sera en ligne et ça le fera pas si je demande aux clients de faire la manip pour mettre ce site en confiance flash...

On peut pas forcer ce truc ?
Atila67
Roooooooolala, sur une URL http://localhost/monsite/ J'ai une violation sandbox... C'est quoi ce délire. Il ne veut pas me laisser communiquer avec un autre site http...
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.