If the Player class must call methods in the GUI class, why not use the Player class for the GUI instance as a constructor argument? Thus, any code that creates a Player will have to tell him what GUI it should use for such method calls.
This is an approach known as dependency injection, and is generally considered superior to single or static methods.
source share