分享

Robocode源代码研究 - 图形界面的启动

 richsky 2012-04-08

上次查到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);

让我们下次再来研究。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多