Problems forming NetworkTable between Robot and SmartDashboard

Hello!

We are currently trying to form a connection between the robot and the Smart Dashboard. Here is part of the extension code we have written in Java:


if (table== null)
{  
            NetworkTable.setTeam(1943);
            NetworkTable.setServerMode();
            try {
                NetworkTable.initialize();
            } catch (IOException ex) {
                Logger.getLogger(TutorialLabel.class.getName()).log(Level.SEVERE, null, ex);
            }
            
            table = NetworkTable.getTable("RoboRealm");
}

And here is the robot code we have written in C++:


NetworkTable::SetTeam(1943);
NetworkTable::SetIPAddress("10.19.43.5");
NetworkTable::Initialize();
		
roborealmNetTable = NetworkTable::GetTable("RoboRealm");

The Java code runs okay, but the C++ doesn’t. When debugging it, we noticed that the code freezes after we call the “NetworkTable::Initialize()” function. What can cause this problem? Can you spot anything wrong with our code?

Thanks!

How are you initializing NetworkTable in C++? Is it a static declaration? Could you post the entire class?

Here is the complete robot code:

#include "WPILib.h"


class RobotDemo : public SimpleRobot
{
	Joystick stick; 
	Jaguar jaguar;
	
	NetworkTable* roborealmNetTable;
public:
	RobotDemo(void):
		stick(1),
		jaguar(2),
		roborealmNetTable(NULL)
	{
		NetworkTable::SetTeam(1943);
		NetworkTable::SetIPAddress("10.19.43.5");
		NetworkTable::Initialize();
		
		roborealmNetTable = NetworkTable::GetTable("RoboRealm");
	}

	void Autonomous(void)
	{

	}

	void OperatorControl(void)
	{
		while (IsOperatorControl())
		{
			
			if (stick.GetRawButton(1))
			{
				jaguar.Set(stick.GetY());
			}
			else
			{
				double d = roborealmNetTable->GetNumber("InputValue");
				jaguar.Set(d);
			}
			
			if (stick.GetRawButton(2))
			{
				roborealmNetTable->PutNumber("InputValue", 0);
			}
			
			Wait(0.005);				// wait for a motor update time
		}
	}	
	/**
	 * Runs during test mode
	 */
	void Test() {

	}
};

The issue is probably how you are initializing the NetworkTable. You are setting it to null, where it probably should be initialized. I have not yet worked with NetworkTable’s, but you can try looking at the WPILib Cookbook. Also, since you have declared a variable, you can use it as a pointer, so instead of this:

RobotDemo(void):
		stick(1),
		jaguar(2),
		roborealmNetTable(NULL)
	{
		NetworkTable::SetTeam(1943);
		NetworkTable::SetIPAddress("10.19.43.5");
		NetworkTable::Initialize();
		
		roborealmNetTable = NetworkTable::GetTable("RoboRealm");
	}

You could try this:

RobotDemo(void):
		stick(1),
		jaguar(2)
	{
                roborealmNetTable = new NetworkTable("RoboRealm");
		roborealmNetTable->SetTeam(1943);
		roborealmNetTable->SetIPAddress("10.19.43.5");
		roborealm->Initialize();
		
	}

I’m sorry if this is incorrect. This just seems to be the most likely solution to the problem. I will work on NetworkTables later this week. Try this and let me know how it works out!