Creation of a FileDialog requires a Frame parent. If this is done from a Button then the Frame has to be found by walking up the parent tree from the Button:
class OpenButton extends Button { public boolean action(Event evt, Object what) { Object fr = evt.target; while (fr != null && !(fr instanceof Frame)) fr = ((Component) fr).getParent(); new FileDialog((Frame) fr, "Open"); } }