2012-04-06 10 views
4

EDIT: Dieses Problem ist gelöst, gut, dank Reniuz für seine 5 Stunden Arbeit und Forschung zu diesem Thema, vielen Dank.So beheben Sie System.NullReferenceException: Objektreferenz nicht auf eine Instanz eines Objekts gesetzt

NullReferenceException: Objektreferenz nicht auf eine Instanz eines Objekts festgelegt. auf den folgenden Code und ich habe gesucht und gesucht und zog meine Haare für über 7-8 Stunden jetzt versucht, es zu beheben.

private void buttonAddEffect_Click_1(object sender, EventArgs e) 
{ 
    EffectSelectorForm effectSelectorForm = new EffectSelectorForm(Effects); 
    if (effectSelectorForm.ShowDialog(this) == DialogResult.OK) 
    { 
     // create a new instance of the selected effect as we may want multiple copies of one effect 
     Effect effect = (Effect)Activator.CreateInstance(effectSelectorForm.SelectedEffect.GetType()); 
     audioGraph.AddEffect(effect); 
     int index = checkedListBox1.Items.Add(effect, true); 
     checkedListBox1.SelectedIndex = index; 
    } 
    //MessageBox.Show(String.Format("I have {0} effects", Effects.Count)); 
} 

Fehler ist auf der Linie: EffectSelectorForm effectSelectorForm = new EffectSelectorForm (Effekte);

die Klasse:

namespace WindowsFormsApplication13 
{ 
    public partial class EffectSelectorForm : Form 
    { 
     public EffectSelectorForm(ICollection<Effect> effects) 
     { 
      InitializeComponent(); 
      listBoxEffects.DisplayMember = "Name"; 
      listBoxEffects.DataSource = effects; 
     } 

     private void buttonOK_Click(object sender, EventArgs e) 
     { 
      this.DialogResult = DialogResult.OK; 
      this.Close(); 
     } 

     public Effect SelectedEffect 
     { 
      get 
      { 
       return (Effect)listBoxEffects.SelectedItem; 
      } 
     } 

     private void listBoxEffects_DoubleClick(object sender, EventArgs e) 
     { 
      buttonOK_Click(sender, e); 
     } 

Was ist das tun soll, wenn die effectSelectorForm lädt sie eine Liste aller Sprachwechsler Optionen machen sollte, aber es macht das nicht .... es lädt auf nichts Ich habe diesen Code von einem anderen Formular erhalten, um die Stimme in Skype zu ändern, und habe etwa 400 Zeilen Code neu geschrieben, damit er in meiner App funktioniert. Aber jetzt habe ich dieses Problem und gebe nicht mit all den Anstrengungen auf, die ich habe in so weit gebracht. Wenn es auf dem anderen Projekt geladen wird, warum nicht in diesem? Ich habe stundenlang über Code hinweggedacht und überlegt, ob ich etwas vermisse, aber nein.

Jede Hilfe wäre fantastisch.

Stapel

See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box. 

************** Exception Text ************** 
System.NullReferenceException: Object reference not set to an instance of an object. 
    at WindowsFormsApplication13.pwn4g3.buttonAddEffect_Click_1(Object sender, EventArgs e) in F:\Users\Tom\Desktop\New folder\New folder (2)\TestApp\pwn4g3\PWN4G3\MainForm2.cs:line 1758 
    at System.Windows.Forms.Control.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
    at System.Windows.Forms.Button.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 

Effect.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace JSNet 
{  

    public abstract class Effect 
    { 
     private List<Slider> sliders; 
     public float SampleRate { get; set; } 
     public float Tempo { get; set; } 
     public bool Enabled { get; set; } 

     public Effect() 
     { 
      sliders = new List<Slider>(); 
      Enabled = true; 
      Tempo = 120; 
      SampleRate = 44100; 
     } 

     public IList<Slider> Sliders { get { return sliders; } } 

     public Slider AddSlider(float defaultValue, float minimum, float maximum, float increment, string description) 
     { 
      Slider slider = new Slider(defaultValue, minimum, maximum, increment, description); 
      sliders.Add(slider); 
      return slider; 
     } 

     public abstract string Name { get; } 

     // helper base methods 
     // these are primarily to enable derived classes to use a similar 
     // syntax to JS effects 
     protected float slider1 { get { return sliders[0].Value; } } 
     protected float slider2 { get { return sliders[1].Value; } } 
     protected float slider3 { get { return sliders[2].Value; } } 
     protected float slider4 { get { return sliders[3].Value; } } 
     protected float slider5 { get { return sliders[4].Value; } } 
     protected float slider6 { get { return sliders[5].Value; } } 
     protected float slider7 { get { return sliders[6].Value; } } 
     protected float slider8 { get { return sliders[7].Value; } } 
     protected float min(float a, float b) { return Math.Min(a, b); } 
     protected float max(float a, float b) { return Math.Max(a, b); } 
     protected float abs(float a) { return Math.Abs(a); } 
     protected float exp(float a) { return (float)Math.Exp(a); } 
     protected float sqrt(float a) { return (float)Math.Sqrt(a); } 
     protected float sin(float a) { return (float)Math.Sin(a); } 
     protected float tan(float a) { return (float)Math.Tan(a); } 
     protected float cos(float a) { return (float)Math.Cos(a); } 
     protected float pow(float a, float b) { return (float)Math.Pow(a, b); } 
     protected float sign(float a) { return Math.Sign(a); } 
     protected float log(float a) { return (float)Math.Log(a); } 
     protected float PI { get { return (float)Math.PI; } } 

     protected void convolve_c(float[] buffer1, int offset1, float[] buffer2, int offset2, int count) 
     { 
      for (int i = 0; i < count * 2; i += 2) 
      { 
       float r = buffer1[offset1 + i]; 
       float im = buffer1[offset1 + i + 1]; 
       float cr = buffer2[offset2 + i]; 
       float ci = buffer2[offset2 + i + 1]; 
       buffer1[offset1 + i] = r * cr - im * ci; 
       buffer1[offset1 + i + 1] = r * ci + im * cr; 
      } 
     } 


     public virtual void Init() 
     { 
     } 


     public abstract void Slider(); 


     public virtual void Block(int samplesblock) 
     { 
     } 


     public abstract void Sample(ref float spl0, ref float spl1); 

     public override string ToString() 
     { 
      return Name; 
     } 
    } 
} 
+1

Die Stack-Trace wäre hilfreich. Sind Sie sicher, dass in Effect keine Felder vorhanden sind, die null sind, wenn die DataSource festgelegt und verarbeitet wird, die null verursachen? –

+0

> Stack-Trace hinzugefügt, und es ist, wenn ich OK drücke ich bekomme den Fehler, aber ich denke, es ist, weil sie nichts in der Listbox ist und seine Null zurückgibt .. in diesem Fall muss ich herausfinden, warum sie nichts in der Liste ist. – iKonroi

+0

Kannst du nicht debuggen und sehen, was hast du in der Effects-Variable, die an Formular übergeben wird? – Reniuz

Antwort

3

Wenn das Problem ist zu 100% hier

EffectSelectorForm effectSelectorForm = new EffectSelectorForm(Effects); 

gibt es nur eine mögliche Erklärung: Eigenschaft/Variable "Effekte" nicht ordnungsgemäß initialisiert ... Debuggen Sie Ihren Code, um zu sehen, was Sie an Ihre Objekte übergeben.

EDIT nach mehreren Stunden

Es gab einige Probleme:

  • MEF Attribut [Import] funktioniert nicht wie erwartet, so dass wir ersetzt es für die Zeit mit einem manuell besiedelten sein Liste <>. Während die Auflistung null war, verursachte sie später im Code Ausnahmen, wenn die Methode versuchte, den Typ des ausgewählten Elements abzurufen, und es gab keine.

  • mehrere Event-Handler wurden nicht verdrahtet Ereignisse zu steuern

Einige Probleme noch vorhanden sind, aber ich glaube, OP ursprüngliche Problem behoben wurde. Andere Probleme sind nicht mit diesem Problem verbunden.

+1

Es hat mit den Objekten in dieser Liste zu tun. Weil Sie eine DataSource auf null setzen können. Wenn Effects null wäre, wäre es nur eine leere Liste und er könnte nichts auswählen. Also müssen es die Objekte in dieser Liste sein. Manchmal ist die Magie in .NET großartig, manchmal macht es das Debuggen unmöglich. –

+0

Ich denke es, weil ich in Ordnung bin, wenn es null ist .. und wie ich sagte, wenn das das Problem ist, dann bin ich immer noch auf dem Problem, dass ich es nicht zu laden Effekte bekommen kann. Tut mir leid, ich bin ein bisschen neu. Ich habe debuggen und nicht sicher, wie es hilft, Fehler zu finden. – iKonroi

+0

@AndrewFinell es tut debuggen, ja .. aber sobald ich öffne diese Listbox und drücke OK es Break Debuggen jetzt .. Und ich verstehe warum, weil es null ist .. Aber jetzt muss ich arbeiten, warum die Listbox nicht Inhalt hinzugefügt hat zu ihm. – iKonroi

0

Während des Debuggens alle Ausnahmen auslösen. Debug-> Ausnahmen

Überprüfen Sie alle Ausnahmen 'Geworfen'. F5, der Code stoppt auf der fehlerhaften Zeile.

0

Ich hatte das gleiche Problem, aber es trat nur auf der veröffentlichten Website auf GoDaddy. Es war kein Problem in meinem lokalen Host.

Der Fehler kam von einer aspx.cs (Code hinter Datei), wo ich versuchte, einen Wert zu einer Bezeichnung zuzuweisen. Es erschien, dass innerhalb des Codes hinter, dass die Bezeichnung Text scheint null zu sein. Also alles, was ich gemacht habe, ändere alle meine Label Text Eigenschaften in der ASPX Datei von Text = "" auf Text = "".

Das Problem verschwand. Ich weiß nicht, warum der Fehler von der gehosteten Version passiert, aber nicht von meinem localhost und habe keine Zeit herauszufinden warum. Aber es funktioniert jetzt gut.

Verwandte Themen