static class Thing will secure your program work.
As it is, you've got Thing as an inner class, which (by description) is connected with a particular instance of Hello(even if it never uses or refers to it), which suggests it's an error to say new Thing(); without having a particular Helloinstance in range.
If you declare it as a static class instead, then it's a "nested" class, which doesn't require a special Hello instance.