繁体   English   中英

C#,“对象引用未设置为对象的实例。”错误

[英]C#, “Object reference not set to an instance of an object.” error

我有这个代码......

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;

但是你的tb_file对象怎么样?

我没有在代码中的任何地方看到该对象的实例化或定义。

阅读您的评论,我认为您传递给“发送”的任何参数都不为空。

我想说,“FileTransferManager”类中存在可用性问题。 可能期望用户提供更多内容(例如,init,configure)。

您需要在FileTransferManager中设置断点,然后进行调试。 别无选择。

在该行断点并悬停以查看值fm 或者tb_file.Text可能就是那个。

其他检查 - 在调用sid = fm.Send(_jid, tb_file.Text, "");之前sid = fm.Send(_jid, tb_file.Text, ""); ,您可以打印所有参数并验证值。

错误是否可能在tb_file.Text上?

代码中的任何地方都没有定义此变量。 如果这是问题,您还应该更正btn_pickFile_Click方法中的分配。

您可以调试应用程序并在抛出异常的代码行上设置断点。 将鼠标悬停在该行上的每个对象上,它将显示哪一个为空。 这将让你知道问题出在哪里,之后就是弄清楚为什么它是空的。 我不能从你发布的代码中说出更多信息。

可能明智地在sid = fm.Send(_jid, tb_file.Text, "");周围粘贴try..catch块sid = fm.Send(_jid, tb_file.Text, ""); 然后在catch中调用snd,您将能够看到堆栈跟踪,它应该告诉您异常的位置。

它可能是从FileTransferManager类中生成的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM