Java 使用Eclipse处理:关闭草图而不关闭其余窗口?

Java 使用Eclipse处理:关闭草图而不关闭其余窗口?,java,eclipse,processing,Java,Eclipse,Processing,我正在Eclipse中处理一个Java项目,该项目有一个扩展PApplet的类来运行处理草图 首先,我有一个JFrame登录屏幕,在用户登录之后,我调用 PApplet.main("Game"); //"Game" is the class that extends PApplet 开始绘制草图 现在当游戏结束时,我想关闭草图窗口,但不是原始的JFrame窗口 通常我会打电话 exit(); 但这会关闭整个应用程序(即所有窗口) 我也试过了 dispose(); 但这没有任何作用 我想我在

我正在Eclipse中处理一个Java项目,该项目有一个扩展PApplet的类来运行处理草图

首先,我有一个JFrame登录屏幕,在用户登录之后,我调用

PApplet.main("Game"); //"Game" is the class that extends PApplet
开始绘制草图

现在当游戏结束时,我想关闭草图窗口,但不是原始的JFrame窗口

通常我会打电话

exit();
但这会关闭整个应用程序(即所有窗口)

我也试过了

dispose();
但这没有任何作用

我想我在找类似的东西

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

但是对于PApplet.

首先,您必须获得保存草图的实例。这意味着使用
runSketch()
函数而不是直接调用
main()

Game game = new Game();
String[] args = {};
PApplet.runSketch(args, game);
现在已经有了对草图实例的引用,可以使用它来访问内部窗口。如何做到这一点取决于您使用的渲染器,但您可以使用和的组合来解决

下面是一个未经测试的使用默认渲染器的示例:

PSurface surface = game.getSurface();
SmoothCanvas smoothCanvas = (SmoothCanvas)surface.getNative();
JFrame frame = (JFrame) smoothCanvas.getFrame();
现在您有了父窗口,可以对其执行任何操作,包括:

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setVisible(false);

就像我说的,我还没有测试这段代码,这将取决于您使用的渲染器,但是,这个使用源代码和JavaDoc来了解引擎盖下到底发生了什么以进入底层窗口的过程是您必须要做的。

您使用的是什么版本的处理?您有没有了解到这一点?PApplet.runSketch(args,game);产生“用法:PApplet[options][sketch args]请参阅Javadoc for PApplet以获取解释。”@EricNewsom您使用的是什么版本的处理?是指向需要调用的函数的JavaDoc的链接。