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.
}
}