There's a base class ServerAdapter:
public abstract class ServerAdapter { public ServerAdapter() { initGUI(); } protected abstract void initGUI(); } And a child class that inherits ServerAdapter:
public abstract class LinuxServerAdapter extends ServerAdapter { protected CheckBox key = new CheckBox(); public LinuxServerAdapter() { super(); } @Override public void initGUI() { //NPE is thrown here, because key = null key.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { //Something happens here } }); } } End class that inherits LinuxServerAdapter:
public class MyLinuxServerAdapter extends LinuxServerAdapter { public MyLinuxServerAdapter() { super(); } public static void main(String args[]) { ServerAdapter server = new MyLinuxServerAdapter(); } } NPE is thrown when I try to add clickHandler on a key.
Why key isn't initialized? Is this a case where initialization order works in a specific way?
initGUI()is called from a base class. Your class text is essentially appended to the end of base class in invocation order.