上次查到RobocodeMain.run()方法,现在就来看看这个方法。 这个方法整体没有一个大循环,程序运行过这个run()方法后,便再没有什么复杂的动作。但是Robocode程序并不是运行一下便结束的程序,由此可知,后面必然是启动了图形界面。图形界面中的事件队列处理循环将维持程序不断运行,直到收到一个关闭事件。 那么,我们只需要在这里寻找图形界面相关的代码即可。其他代码可以暂时忽略。 对这个方法从头到尾看下去,很容易便找到了GUI相关的代码: if (windowManager.isGUIEnabled()) { if (!setup.minimize && setup.battleFilename == null && soundManager != null) { soundManager.playThemeMusic(); windowManager.showSplashScreen(); } windowManager.showRobocodeFrame(true, setup.minimize); // Play the intro battle if a battle file is not specified // and this is the first time Robocode is being run final String currentVersion = versionManager.getVersion(); if (setup.battleFilename == null && !properties.getLastRunVersion().equals(currentVersion)) { properties.setLastRunVersion(currentVersion); properties.saveProperties(); windowManager.runIntroBattle(); } } 第一句判断显然是检查GUI支持是否就绪。 接下来进行一些判断后,开始奏响启动音乐并显示启动画面。 再下面的 windowManager.showRobocodeFrame(true, setup.minimize); 一句,显然是整个图形界面显示的关键。 就是这一句,将Robocode的整个程序主界面显示了出来。 很显然,图形界面显示的调用,一定是异步调用,所以在图形界面显示之后,程序会继续向下进行。 紧随其后的注释,道出了下面代码的用意:如果程序第一次运行则播放介绍性战斗演示。
run()方法中后面的代码,则是在显示不成功时进行的扫尾处理。程序将以非正常的返回码推出,并向Standard Error输出错误信息。
至于最关键的 windowManager.showRobocodeFrame(true, setup.minimize); 让我们下次再来研究。 |
|
来自: richsky > 《robocode》