(Java) Error calling subsystem method from command

I’m having trouble calling methods from subsystems on Netbeans. When I call DriveSystem, it shows up fine and the preset methods show up, but whenever I try to call a method that I created myself it gives me an error saying “cannot find symbol method doNothing()”. I tried different subsystems and commands, and even tried renaming them, but nothing seems to work and I can’t find anything that might cause an error.

Command Code:

public class DriveDoNothing extends CommandBase {

public DriveDoNothing() {
    requires(DriveSystem);
}


protected void execute() {
    DriveSystem.doNothing();

}

}

Subsystem Code:
public class DriveSystem extends Subsystem {

public void doNothing() {

     leftMotor.set(0.0);

    rightMotor.set(0.0);

}

}

You’re trying to call a non static method from a static context. You can either make the do nothing method static, along with the drive motors, or you can make an instance of the subsystem and call the method of that.

What you need to do is declare a static instance of your subsystem in your CommandBase class.


public class CommandBase {

     public static DriveSystem driveSystem = new DriveSystem();
...
}

Then you use this static instance of the dirve system in your command.


public class DriveDoNothing extends CommandBase {

    public DriveDoNothing() {
        requires(driveSystem);
    }


    protected void execute() {
        driveSystem.doNothing();

    }
}

If you’d like more details of why this works the way it does I’d be happy to expand my explanation for you.

It worked! I’m so happy…this has been bugging me for so long, thank you very much.