I have a feeling that you can't, but is it possible to close the window of a stand-alone project in-game?


Field f = GreenfootScenarionViewer.class.getDeclaredField("rootPaneContainer"); f.setAccessible(true); //<Set variable like this> Component c = (Component)f.get(<viewer instance>);
new GreenfootScenarioViewer(frame);
import java.awt.Toolkit; import java.awt.event.WindowEvent; import java.lang.reflect.Field; import greenfoot.core.WorldHandler; import greenfoot.export.GreenfootScenarioViewer; import greenfoot.platforms.WorldHandlerDelegate; import greenfoot.platforms.standalone.WorldHandlerDelegate; public class Blah { public void close() throws NoSuchFieldException{ WorldHandler wh = WorldHandler.getInstance(); Field whd_get = WorldHandler.class.getDeclaredField("handlerDelegate"); whd_get.setAccessible(true); WorldHandlerDelegate w = (WorldHandlerDelegate)whd_get.get(wh); if(w instanceof WorldHandlerDelegateStandAlone) { WorldHandlerDelegateStandAlone wsa = (WorldHandlerDelegateStandAlone)w; Field gsv_get = WorldHandlerDelegateStandAlone.class.getDeclaredField("viewer"); gsv_get.setAccessible(true); GreenfootScenarioViewer gsv = (GreenfootScenarioViewer)gsv_get.get(wsa); Field f = GreenfootScenarioViewer.class.getDeclaredField("rootPaneContainer"); f.setAccessible(true); RootPaneContainer rpc = (RootPaneContainer)f.get(gsv); WindowEvent wev = new WindowEvent(rpc, WindowEvent.WINDOW_CLOSING); Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(wev); } else return; //Not stand-alone, don't continue. } }
import java.awt.Toolkit; import java.awt.event.WindowEvent; import java.lang.reflect.Field; import greenfoot.core.WorldHandler; import greenfoot.export.GreenfootScenarioViewer; import greenfoot.platforms.WorldHandlerDelegate; import greenfoot.platforms.standalone.WorldHandlerDelegateStandAlone; import javax.swing.RootPaneContainer; import javax.swing.JFrame; public class Blah { public void close() throws NoSuchFieldException,java.lang.IllegalAccessException{ WorldHandler wh = WorldHandler.getInstance(); Field whd_get = WorldHandler.class.getDeclaredField("handlerDelegate"); whd_get.setAccessible(true); WorldHandlerDelegate w = (WorldHandlerDelegate)whd_get.get(wh); if(w instanceof WorldHandlerDelegateStandAlone) { WorldHandlerDelegateStandAlone wsa = (WorldHandlerDelegateStandAlone)w; Field gsv_get = WorldHandlerDelegateStandAlone.class.getDeclaredField("viewer"); gsv_get.setAccessible(true); GreenfootScenarioViewer gsv = (GreenfootScenarioViewer)gsv_get.get(wsa); Field f = GreenfootScenarioViewer.class.getDeclaredField("rootPaneContainer"); f.setAccessible(true); System.out.println(f.get(gsv).getClass()); JFrame rpc = (JFrame)f.get(gsv); WindowEvent wev = new WindowEvent(rpc, WindowEvent.WINDOW_CLOSING); Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(wev); } else return; //Not stand-alone, don't continue. } }