The error indicates that the ImageIO.read is tossing an IllegalArgumentException in SpriteSheet.load. So the call to
SpritSheet.class.getResource(path)) is returning null, which throws an IllegalArgumentException from load, which goes back to the constructor and finally to the static initializer.
Resource loading is not something I'm good with. At all. It always takes me a long time to get it right. Java's a bit confusing since there's two different types, one hinged off of class, and the other hinged off of classLoader. Last time I did this, I'm pretty sure I simply gave it an absolute path from the class path using /path/to/image nested in that structure from the project root, and then loaded it using
MyClass.class.getClassLoader().getResource(thatpath). But looks to me that the only problem you have is the loading of the image resource itself.
header('HTTP/1.1 420 Enhance Your Calm');