【问题标题】:Object refernce not set to an instance of an object error, not sure why对象引用未设置为对象错误的实例,不知道为什么
【发布时间】:2012-02-24 16:36:11
【问题描述】:

我有一个 .dll 中的代码,unity3d 中的游戏使用它来连接服务器。并且由于某种原因,当 unity3d 中的代码使用 .dll 中的代码时,它说对象引用没有设置为对象的实例。为什么会抛出这个错误?我在使用它之前声明了一切。

编辑*我发布此错误的原因是我找不到任何会导致此错误的内容,没有任何内容为空,所以请帮助,不要抱怨 iv 尝试搜索但我找不到任何显示会引发错误的内容。

.dll 中的代码

    public void Start(string IP,int Port)
    {

        try
        {
            keyHandeler.create();
            TcpClient socket = new TcpClient();
            socket.Connect(IP, Port);
            st = socket.GetStream();
            Connection(true);
        }
        catch { Connection(false); }
    }

unity3d 中的代码

    Client server = new Client();
    void Start () 
    {
         server.Start(IP, Port); // throws the object reference not set to an instance of an object
         // other stuff after this but it never reaches them
}

【问题讨论】:

  • 您在询问之前尝试过搜索吗?哪怕一点点?
  • keyHandeler 是在哪里创建的?也许它是空的
  • 你在哪里实例化了server
  • 我确实尝试过搜索任何我发现不起作用的东西,而 keyHanderer 是一个静态类,keyHanderler.create() 在静态类中创建所有内容,服务器在统一类中实例化

标签: c# unity3d


【解决方案1】:

server.Start(IP, Port); 上设置断点并查看Server 是否为空。

如果它不为空,则表示 keyHandeler.create();socket.Connect(IP, Port); 正在发生某事。

您可以访问 DLL 代码吗?如果是,他们尝试通过设置断点来调试它并查看是否有任何对象为空。

【讨论】:

  • Unity3d dosnt 使用 Visual Studio 调试器,所以我不能使用断点,我只知道 server.start(IP, Port) 抛出错误,并且 iv 之前在 winForms 和效果很好
  • 我刚刚将 keyHandeler.create() 注释掉了,所以不是这样
  • 我知道它的 socket.Connect(IP,Port) 因为它会抛出代码。统一的好处是它突出了抛出代码的行。但我不确定为什么会这样。它不应该为空。
  • 您在 Start 方法中有 try catch,因此不会引发任何异常,所以我认为那里没有问题。我认为它没有连接是因为 IP 和端口,并且当您在某处使用该连接时它会导致异常。您可以通过将 server.Start(IP, Port); 放入 try catch 来检查。
  • MonoDevelop 中当然有调试器。看看说明书,会省很多时间
猜你喜欢
  • 2014-07-31
  • 1970-01-01
  • 2019-03-20
  • 2011-07-09
  • 2012-08-31
  • 2011-11-21
  • 2012-10-01
  • 1970-01-01
相关资源
最近更新 更多