[英]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.