RapidMiner studio之GUI源码分析

以GUI方式启动RapidMiner时,其入口是类com.rapidminer.gui.RapidMinerGUI,这个类中有com.rapidminer.RapidMiner类的一个引用,RapidMiner是整个工具的主类,其完成了大多数的初始化工作,RapidMinerGUI则添加了以GUI方式启动时的相关配置的初始化功能。

以下从com.rapidminer.gui.RapidMinerGUI的main方法开始,分析RapidMiner studio启动过程:

RapidMiner.main

safeMode = new SafeMode();
safeMode.launchStarts();
launch(args);
safeMode.launchComplete();

SafeMode类的主要作用是在启动的时候判断是否有一个safeMode.lock文件,如果有,则说明上次启动后RapidMiner studio进程没有正常结束,则会询问用户是否要进入安全模式(安全模式下不加载插件),如果没有这个文件,则先创建这样一个文件,然后再启动进程,这个类的源码很简单,可以自己查看。

launch方法最终调用的是RapidMinerGUI中的run方法,run方法中,调用开源框架vldocking进行UI的设置,然后就是调用RapidMiner类中的静态方法和其它一些工具类进行参数的初始化工作,与UI相关的参数的初始化工作则在RapidMinerGUI类中完成。

以下分析run方法中调用的各个方法完成的工作:

 1 DockingUISettings.setInstance(new DockingUISettings());
 2 DockableContainerFactory.setFactory(new TabFactory());
 3 RapidMiner.showSplash();
 4 RapidMiner.splashMessage("basic");
 5 RapidMiner.init();
 6 RapidMiner.splashMessage("workspace");
 7 RapidMiner.splashMessage("plaf");
 8 setupToolTipManager();
 9 setupGUI();
10 RapidMiner.splashMessage("history");
11 loadRecentFileList();
12 RapidMiner.splashMessage("icons");
13 SwingTools.loadIcons();
14 RepositoryManager.getInstance(null).createRepositoryIfNoneIsDefined();
15 RapidMiner.splashMessage("create_frame");
16 SwingUtilities.invokeAndWait(new Runnable() {
17     @Override
18     public void run() {
19     setMainFrame(new MainFrame(openLocation != null ? "design" : "welcome"));
20             }
21     });
22 RapidMiner.splashMessage("gui_properties");
23 loadGUIProperties(mainFrame);
24 RapidMiner.splashMessage("plugin_gui");
25 Plugin.initPluginGuis(mainFrame);
26 RapidMiner.splashMessage("show_frame");
27 mainFrame.setVisible(true);
28 UsageStatsTransmissionDialog.init();
29 RapidMiner.splashMessage("checks");
30 Plugin.initFinalChecks();
31 RapidMiner.splashMessage("ready");
32 RapidMiner.hideSplash();
33 if (openLocation != null) {
34     if(!RepositoryLocation.isAbsolute(openLocation)) {
35     SwingTools.showVerySimpleErrorMessage("malformed_repository_location", openLocation);
36             } else {
37                 OpenAction.open(openLocation, false);
38             }
39         }
40 Plugin.initPluginUpdateManager();
41 UpdateManager.checkForUpdates();
42 UpdateManager.checkForPurchasedNotInstalled();
43 AutoSave autosave = new AutoSave();
44 autosave.onLaunch();

代码的1-2行使用的是开源框架vldocking进行GUI的设置,因为先阶段关心的是RapidMiner的核心模块(operator,process,repository),所以暂时没有研究这个ui框架,等RapidMiner研究透彻了再来关心这个框架。

代码的3-4行是创建一个启动画面,在画面中提示当前进行的工作,这二行代码调用的方法的实现也很简单,这里就不做具体分析了,需要注意的是splashMessge方法是支持多语言环境的,其多语言支持请查看RapidMiner Studio之GUI多语言支持

代码的第5行,是调用RapidMiner类的init方法完成一些功能的设置,这些功能包括多语言支持、rapidminer home变量设置、repository初始化、配置文件读取和访问、插件注册、operator注册、xml解析(解析operator的XML DOM)、加载JDBC驱动、渲染器初始化。

在调用RapidMiner的init方法之前,加载RapidMiner类时,RapidMiner中的static代码块首先完成一些参数的设置,这其中就包含了对语言的设置。

RapidMiner类的init调用的是其它工具类的方法来完成初始化工作,除了插件注册、operator注册外,其余方法都比较简单,下面分析下这插件注册和operator注册的代码:

插件注册是由Plugin.initAll()完成的,该方法中,调用方法findAndRegisterPlugins(File pluginDir, boolean showWarningForNonPluginJars)加载插件, pluginDir默认路径是(rapidminer home变量下的lib/plugins目录), 该方法继续调用方法registerPlugins(List<File> files, boolean showWarningForNonPluginJars),

时间: 2024-10-28 07:04:56

RapidMiner studio之GUI源码分析的相关文章

【Cocos2d-x】源码分析之 2d/ui/UILayout

#ifndef __LAYOUT_H__ #define __LAYOUT_H__ #include "ui/UIWidget.h" NS_CC_BEGIN namespace ui { typedef enum { LAYOUT_COLOR_NONE,//空 LAYOUT_COLOR_SOLID,//单一固定颜色的 LAYOUT_COLOR_GRADIENT//有梯度变化的 }LayoutBackGroundColorType;//容器背景颜色类型 typedef enum { LA

Hadoop2源码分析-准备篇

1.概述 我们已经能够搭建一个高可用的Hadoop平台了,也熟悉并掌握了一个项目在Hadoop平台下的开发流程,基于Hadoop的一些套件我们也能够使用,并且能利用这些套件进行一些任务的开发.在Hadoop的应用级别上,我们接着往后面去研究学习,那就是Hadoop的源码了,作为Hadoop开发人员,我们得去学习和研究Hadoop得实现原理,底层框架的设计,编码的实现过程等等,下面就开始我们今天的Hadoop源码分析之旅. 2.准备 在分析源码之前,我们需要准备好分析源码的环境,以及如何去分析(分

Android Retrofit源码分析(一边用一边侃)

这几天空余时间总是想着写点什么,所以紧跟着之前android盒子模型FlexBoxLayout之后有写下了这篇Retrofit源码分析使用篇. 前言: Retrofit由于简单与出色的性能,使其安卓上最流行的HTTP Client库之一. Android Studio开发相关配置如下: compile "com.squareup.retrofit2:retrofit:2.0.2" compile "com.squareup.retrofit2:converter-gson:2

Opencv2.4.9源码分析——Cascade Classification(三)

前两篇文章分别介绍了级联分类器的原理和源码解析,下面我们给出一个具体的应用实例. 下面我们以车牌识别为例,具体讲解OpenCV的级联分类器的用法.在这里我们只对蓝底白字的普通车牌进行识别判断,对于其他车牌不在考虑范围内.而且车牌是正面照,略微倾斜可以,倾斜程度太大也是不在识别范围内的. 我们通过不同渠道共收集了1545幅符合要求的带有车牌图像的照片(很遗憾,我只能得到这么多车牌照片,如果能再多一些就更好了!),通过ACDSee软件手工把车牌图像从照片中剪切出来,并统一保存为jpg格式.为便于后续

Android 源码分析工具

标 题: [原创]Android源码分析工具及方法作 者: MindMac时 间: 2014-01-02,09:32:35链 接: http://bbs.pediy.com/showthread.php?t=183278 在对 Android 源码进行分析时,如果有得力的工具辅助,会达到事半功倍的效果.本文介绍了一些在分析 Android 源码时使用的一些工具和方法,希望能够帮助到有需要的同学. Eclipse 在 Android 应用程序开发过程中,一般会使用 Eclipse,当然 Googl

Android之App界面的挂载与显示及源码分析

前言 入门 视图树 源码分析 前言 好久没有写博客了,都感觉有些生疏了. 总觉的人对自己要求高一些比较好,这样才进步比较快.接下来会继续给大家带来一些更有用的知识. 个人水平有限,如果感觉我的博客对您有用处,那就留个言给下鼓励:如果那里写的有误,请各位看客老爷多多拍砖! 注意:此处我使用的IDE是Android Studio 入门 相信每个人在学习Android时,都创建过很多Demo工程,那么下面的代码,大家一定非常眼熟了. public class MainActivity extends

《Entity Framework 6 源码分析》

背景 以Code First方式编写简单代码,按源码执行过程,逐步讲解Entity Framework工作原理.本系列博文系我学习Entity Framework 6 Code First的总结之作.学习过程中参考了大量MSDN资料,因参考资料过多,且皆可从EF主页索引到,故不一一列举.所有阅读过的正式出版的书籍,详见参考文献一节.部分章节因论述需要所引用其它.NET书籍将在该章节内注明引用信息.为了分析代码,我经常访问.NET参考源码页面. 因水平有限,若有谬误,恳请指正,同时欢迎企鹅群185

Android -- 消息处理机制源码分析(Looper,Handler,Message)

android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道,因此我没将其作为核心类.下面一一介绍: Looper Looper的字面意思是“循环者”,它被设计用来使一个普通线程变成Looper线程.所谓Looper线程就是循环工作的线程.在程序开发中(尤其是GUI开发中),我们经常会需要一个线程不断循环,一旦有新任务则执行,执行完继续等待下一个任务,这就是Lo

Android消息处理机制(源码分析)

前言 虽然一直在做应用层开发,但是我们组是核心系统BSP,了解底层了解Android的运行机制还是很有必要的.就应用程序而言,Android系统中的Java应用程序和其他系统上相同,都是靠消息驱动来工作的,它们大致的工作原理如下: 1. 有一个消息队列,可以往这个消息队列中投递消息. 2. 有一个消息循环,不断从消息队列中取出消息,然后处理 . 为了更深入的理解Android的消息处理机制,这几天空闲时间,我结合<深入理解Android系统>看了Handler.Looper.Message这几