2011-03-11 74 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

相关问题