Forum Programmation.c# System.NullReferenceException avec Gecko

Posté par  (site web personnel) .
Étiquettes :
0
7
avr.
2005
Bonjour,

Je suis développeur Java et PHP et je me mets actuellement au C#. J'ai commencé avec l'exemple simple d'un petit navigateur utilisant la librairie Gecko.
La compilation se passe bien, mais à l'exécution j'obtiens cette erreur :

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object

J'utilise MonoDevelop 0.5 avec la Mandrake 10.2rc. J'ai bien défini la variable MOZILLA_FIVE_HOME et LD_LIBRARY_PATH contient bien /usr/lib/mozilla-firefox-1.0.1/:/usr/lib/mozilla-firefox-1.0.1/ ( contenant le fichier libgtkembedmoz.so).
J'ai utilisé le tutoriel se trouvant à l'adresse
http://primates.ximian.com/~edasque/projects/Tutorial/glade2.html.(...)
Dans celui-ci, il parle de cette erreur :
Mozilla: because of the way Mozilla is installed in some distributions (I haven't been able to trace what it exactly is yet), running the application in MonoDevelop causes the following failure: Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object . Running the application from a terminal (the exe is in the project bin/Debug directory) solves that issue. Also make sure MOZILLA_FIVE_HOME is set.
Mais même lorsque je lance l'applic en ligne de commande, l'erreur se produit.

Y a-t-il autre chose à configurer ?
  • # manque le principal

    Posté par  (site web personnel) . Évalué à 2.

    si tu pouvais filer le morceau de code incriminé qu'on puisse t'aider ca serait cool :)
    • [^] # Re: manque le principal

      Posté par  (site web personnel) . Évalué à 1.

      Sorry...

      // project created on 7/04/2005 at 11:49
      using System;
      using Gtk;
      using Glade;
      using Gecko;

      public class GBrowser
      {
      [Widget] Frame mainWindow;
      [Widget] Entry UrlEntry;
      WebControl web;

      public static void Main (string[] args)
      {
      new GBrowser (args);
      }

      public GBrowser (string[] args)
      {
      Application.Init();
      Glade.XML gxml = new Glade.XML (null, "gui.glade", "window1", null);
      gxml.Autoconnect (this);
      web = new WebControl();
      web.Show();
      mainWindow.Add(web);
      Application.Run();
      }

      /* Connect the Signals defined in Glade */
      public void OnWindowDeleteEvent (object o, DeleteEventArgs args)
      {
      Application.Quit ();
      args.RetVal = true;
      }

      void load_url( object source, EventArgs args)
      {
      web.LoadUrl(UrlEntry.Text);
      }
      }

      • [^] # Re: manque le principal

        Posté par  (site web personnel) . Évalué à 2.

        Bon je suppose que l'erreur arrive à la ligne "mainWindow.Add(web)"
        Y'a de forte chance que l'initialisation du fichier glade a échoué et que du coup il a pas réussi à initialiser correctement les variables.
        je suppose que ton fichier gui.glade est dans les ressources de MonoDevelop, je me trompes ?
        vérifies bien dans ton fichier glade le nom de tes widgets et fenêtres, "window1", "UrlEntry", etc. et vérifies aussi qu'ils ont bien le même type.

        Si ca marche toujours pas zip moi le projet j'essaierai si tu veux.
        • [^] # Re: manque le principal

          Posté par  (site web personnel) . Évalué à 1.

          Effectivement, le problème vient de mainWindow.Add(web).
          La frame n'est pas déclarée dans le fichier .glade et donc l'objet est null. L'explication est logique.
          Je viens de définir une frame et cela semble fonctionner. Je dis semble car je tombe sur d'autre problème. Mais c'est une autre étape de mon apprentissage du C#.

          Merci pour ton aide.
          • [^] # Re: manque le principal

            Posté par  (site web personnel) . Évalué à 2.

            Disons que bien qu'étant pratique (Glade#), son fonctionnement basé sur l'introspection pour "initialiser" dynamiquement les variables est vraiment pénible à débugger, surtout au début :)
            Je te rassures, c'est la seule lib pour Mono qui fait ce genre de magouille :)
            • [^] # Re: manque le principal

              Posté par  (site web personnel) . Évalué à 1.

              Tu penses que développer une interface graphique à l'aide de Glade est un mauvais choix ?
              Avec Java, je ne me pose pas la question.
              • [^] # Re: manque le principal

                Posté par  (site web personnel) . Évalué à 2.

                Ah si si c'est un très bon choix, là n'est pas la question, je dis juste que pour le débutant le fonctionnement de Glade# est peut être pas super naturel, mais une fois qu'on a compris on se dit que c'est pratique quand même :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.