2011-03-11 71 views
2

我有了這個代碼...C#,「未將對象引用設置爲對象的實例」。錯誤

namespace YellowBox 
{ 
    public partial class Form1 : Form 
    { 

     private string sid = ""; 

     FileTransferManager fm = new FileTransferManager(); 
     Jid _jid = new Jid(); 


     public Form1() 
     { 
      InitializeComponent(); 

      fm.OnError += fm_OnError; 
      fm.OnEnd += fm_OnEnd; 
      fm.OnStart += fm_OnStart; 
      fm.OnProgress += fm_OnProgress; 
     } 

     private void btn_pickFile_Click(object sender, System.EventArgs e) 
     { 
      var of = new OpenFileDialog(); 
      if (of.ShowDialog() == DialogResult.OK) 
      { 
       tb_file.Text = of.FileName; 

       var fi = new FileInfo(of.FileName); 
       //lblSize.Text = Util.HumanReadableFileSize(fi.Length); 

       btn_sendFile.Enabled = true; 
      } 
     } 

     private void btn_sendFile_Click(object sender, System.EventArgs e) 
     { 

     _jid.Server = "xxx"; 
     _jid.User = "xxx"; /// EDIT, added the _jid values. 
     _jid.Resource = "xxx"; 

      sid = fm.Send(_jid, tb_file.Text, ""); /// HERE IT SAYS "Object reference not set to an instance of an object." ??? 
      btn_sendFile.Enabled = false; 
      btn_pickFile.Enabled = false; 
     } 

... 

而當我打的btn_sendFile它給了我一個「不設置到對象的實例對象引用。」錯誤。但是我在FileTransferManager中實例化了fm對象fm = new FileTransferManager(); ,不是嗎?

求助: 出現它丟失fm.XmppClient = xmppClient;

+0

這可能是在抱怨'tb_file'。 – Oded 2011-03-11 15:37:10

+3

在該行上設置一個斷點,並檢查哪個變量爲空。 – Blorgbeard 2011-03-11 15:37:11

+0

放一個斷點,看看什麼是空的,不是? – 2011-03-11 15:37:36

回答

2

讀你的意見,我不認爲你傳遞給「發送」的任何參數爲空。

我會說,在「FileTransferManager」類中存在可用性問題。它可能期望更多的用戶(如init,configure)。

您將需要在FileTransferManager內設置斷點,然後進行調試。別無選擇。

+0

你猜對了!我會研究一下。 – Roger 2011-03-11 16:08:54

+0

感謝每一個人!這是什麼似乎缺少fm.XmppClient = xmppClient; – Roger 2011-03-11 16:12:50

+0

我必須學會更快地輸入:) – MattC 2011-03-11 16:15:24

2

但是你的tb_file對象呢。

我沒有看到你的代碼中的任何地方的實例或定義該對象。

+0

沒關係tb_file,它的一個texbox,從tb_file.Text = of.FileName獲取它的值; – Roger 2011-03-11 15:46:44

+0

@Roger我會像其他人一樣推薦,在給你麻煩的代碼行周圍添加try catch塊。這將有助於您確定它。可能之後,您可以向我們提供有關例外的更多信息? – Lav 2011-03-11 15:55:03

+0

這樣做,麻煩來自「sid = fm.Send(_jid,tb_file.Text,」myFile「);」 – Roger 2011-03-11 16:02:23

1

斷點在線並懸停以查看值fm。或者tb_file.Text可能是一個。

其他檢查 - 在致電sid = fm.Send(_jid, tb_file.Text, "");之前,您可以打印所有參數並驗證值。

+0

將它們顯示爲消息框,參數看起來不錯。 – Roger 2011-03-11 16:03:02

+0

然後在'fm.Send'方法裏面必須要做些什麼。你能介入並看看嗎? – Kumar 2011-03-11 16:11:07

1

錯誤是否可能在tb_file.Text上?

在代碼的任何地方都沒有定義這個變量。如果這是問題,您還應該更正btn_pickFile_Click方法中的分配。

+0

沒關係tb_file,它的一個texbox,它的值從tb_file.Text = of.FileName分配; – Roger 2011-03-11 15:47:20

1

您可以調試應用程序並在拋出異常的代碼行上設置斷點。將鼠標懸停在該線上的每個對象上,它將顯示哪一個爲空。這會讓你知道問題出在哪裏,之後就是找出它爲什麼是空的問題。我不能從你發佈的代碼中多說一些。

+0

這樣做,麻煩來自「sid = fm.Send(_jid,tb_file.Text,」myFile「);」 – Roger 2011-03-11 16:05:54

1

可能明智地堅持一個try..catch塊圍繞sid = fm.Send(_jid, tb_file.Text, "");調用snd,然後在catch中你將能夠看到堆棧跟蹤,它應該告訴你異常是在哪裏進行的。

它可能是從你裏面生成FileTransferManager類。

+0

根據你的堆棧跟蹤,它肯定來自Matrix.Xmpp.Client.FileTransferManager對象中的comnig。 – MattC 2011-03-11 16:10:06

+0

你不需要像fm.XmppClient = xmppClient這樣的東西; ??? – MattC 2011-03-11 16:11:50

相關問題