搜档网
当前位置:搜档网 › JMX 入门教程

JMX 入门教程

JMX 入门教程
JMX 入门教程

1、JMX的Hello World

一、JMX简介

什么是JMX?在一篇网文中是这样说的:"JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理",这句话我现在看着还是不知所云,云里雾里。

我们还是从JMX能给我们提供什么好处入手来理解吧。举一个应用实例:在一个系统中常常会有一些配置信息,比如服务的IP地址,端口号什么的,那么如何来写这些代码呢?

1.程序初哥一般是写死在程序里,到要改变时就去改程序,然后再编译发

布;

2.程序熟手则一般把这些信息写在一个配置文件里(JAVA一般都是

*.properties文件),到要改变时只要改配置文件,但还是重新启动系

统,以便读取配置文件里的新值;

3.程序好手则会写一个段代码,把配置值缓存起来,系统在读值的时候,

先看看配置文件有没有更动。如有更改则重读一遍,否则从缓存里读取

4.程序高手则懂得取物为我所用,用JMX!把配置属性集中在一个类,然后

写一个叫MBean的东东,再配置一下就轻松搞定了。而且JMX自动提供

了一个WEB页面来给你来改变这些配置信息。

二、准备工作

JMX是一份规范,SUN依据这个规范在JDK(1.3、1.4、5.0)提供了JMX接口。而根据这个接口的实现则有很多种,比如Weblogic 的JMX实现、MX4J、JBoss 的JMX实现。在SUN自己也实现了一份,不过在JDK1.4之前,这件JMX实现(一些JAR包)是可选的,你得去它的网站上下载。JDK5.0则内嵌了进来,安装JDK5.0就可以开发基于JMX的代码了。

但JDK5.0并非包含所有SUN的关于JMX的代码,有一些工具类是排除在JDK5.0之外的。下面根据所使用的JDK版本情况,谈一谈开发环境的准备。1、JDK1.3、1.4

去SUN网站下载SUN的JMX实现,共两个ZIP文件,下载网

址:https://www.sodocs.net/doc/da16982174.html,/products/JavaManagement/download.html。

(1)jmx-1_2_1-ri.zip

解压后的lib目录包含:jmxri.jar、jmxtools.jar

(2)jmx_remote-1_0_1_03-ri.zip

解压后的lib目录包含:jmxremote.jar、jmxremote_optional.jar、rmissl.jar

如果在DOS下用命令行开发,则把这五个JAR包加入到classpath系统变量中。如果你用Eclipse开发,则把JAR包加入到项目属性的Libratries(库)引用中。

2、JDK5.0

JDK5.0的jre\lib\rt.jar已经包含了jmxri.jar、 jmxremote.jar、rmissl.jar三个包的代码。如果你用到jmxtools.jar、jmxremote_optional.jar 的类,则需要将这两个类加入到classpath或Eclipse的项目库引用中。

3、我使用的开发环境:JDK5.0 + Eclipse3.2。

注:因为用到jmxtools.jar中的HtmlAdaptorServer类,所以将此包加入到项目库引用中。jmxremote_optional.jar暂时不用到,不管它。

三、HelloWorld实例

1、Hello是一个需要被管理的类(普通类)

java 代码

1.package com.sunhill.jmx;

2.

3.public class Hello implements HelloMBean {

4.private String name;

5.

6.public String getName() {

7.return name;

8.}

9.

10.public void setName(String name) {

https://www.sodocs.net/doc/da16982174.html, = name;

12.}

13.

14.public void printHello() {

15.System.out.println("Hello World, " + name)

;

16.}

17.

18.public void printHello(String whoName) {

19.System.out.println("Hello , " + whoName);

20.}

21.}

2、要管理Hello则必须创建一个相应MBean,如下:

java 代码

1.package com.sunhill.jmx;

2.

3.public interface HelloMBean {

4.public String getName();

5.

6.public void setName(String name);

7.

8.public void printHello();

9.

10.public void printHello(String whoName);

11.}

说明:包含在MBean中方法都将是可以被管理的。MBean起名是有规范的,就是原类名后加上MBean字样。

3、创建一个Agent类

java 代码

1.package com.sunhill.jmx;

2.

3.import https://www.sodocs.net/doc/da16982174.html,ng.management.ManagementFactory;

4.

5.import javax.management.MBeanServer;

6.import javax.management.ObjectName;

7.

8.import https://www.sodocs.net/doc/da16982174.html,m.HtmlAdaptorServer;

9.

10.public class HelloAgent {

11.public static void main(String[] args) throws Ex

ception {

12.// MBeanServer server = MBeanServerFactory.creat

eMBeanServer();

13.MBeanServer server = ManagementFactory.getP

latformMBeanServer();

14.ObjectName helloName = new ObjectName("che

ngang:name=HelloWorld");

15.server.registerMBean(new Hello(), helloName)

;

16.ObjectName adapterName = new ObjectName(

17."HelloAgent:name=htmladapter,p

ort=8082");

18.HtmlAdaptorServer adapter = new HtmlAdapto

rServer();

19.server.registerMBean(adapter, adapterName);

20.adapter.start();

21.System.out.println("start.....");

22.}

23.}

说明:

?先创建了一个MBeanServer,用来做MBean的容器

?将Hello这个类注入到MBeanServer中,注入需要创建一个ObjectName 类

?创建一个AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面。AdaptorServer其实也是一个MBean。

?ghl:name=HelloWorld的名字是有一定规则的,格式为:“域名:name=MBean名称”,域名和MBean名称都可以任意取。

4、运行HelloAgent,然后打开网页:http://localhost:8082/,看效果!

五、总结

在实际系统中我们可以把name变成决定数库链接池的变量,这样我就可以对系统的运行参数进行实现的监控和配置(管理)。而且也可以对一些方法(如printHello)进行远程调用了。

2、JMX简介

一、JMX简介

JMX是一种JAVA的正式规范,它主要目的是让程序且有被管理的功能,那

么怎么理解所谓的“被管理”呢?试想你开发了一个软件(如WEB网站),它是在24小时不简断运行的,那么你可能会想要“监控”这个软件的运行情况,比如收到了多少数据,有多少人登录等等。或者你又想“配置”这个软件,比如现在访问人数比较多,你想把数据连接池设置得大一些。

当然,你也许会专门为这些管理来开发软件,但如果你借助JMX,则会发现创建这样的管理程序是如此简单。因为你无需为管理程序来开发界面,已经有通用的JMX管理软件,如MC4J,或者是用一般都附带提供的HTML网页来管理,你要做的仅仅是将自己要被管理和监控类的按照JMX规范修改一下即可。

中间件软件WebLogic的管理页面就是基于JMX开发的,而JBoss则整个系统都基于JMX构架。下面将JMX的一些概念,从JMX规范转帖如下:

二、JMX构架中的各层及相关的组件

1.工具层(Instrumentation Level)

2.(a) MBeans(标准的,动态的,开放的和模型MBeans)

3.(b) 通知模型:Notification、NotificationListener等类

4.(c) MBean元数据类:Attribute、Opreator等类

5.代理层(Agent Level)

6.(a) MBean Server

7.(b) 代理服务。如前一篇的HtmlAdaptorServer等。

MBean中有getter和setter的就是属性,如前一篇的Hello类中Name。如果只有getter则表示该属性只读。一共有四种MBean,如下:

1.标准MBeans(Standard MBeans)设计和实现是最简单的,这类MBean使

用自己的方法名作为管理接口;

2.动态MBeans(Dynamic MBeans)必须实现一个指定的接口,由于动态MBeans

在运行期间暴露它们的管理接口,因此更为灵活;

3.开放MBeans(Open MBeans)属于动态MBeans,这类MBean依靠基础数据

类型来实现通用管理,并为友情用户进行自我声明;

4.模型MBeans(Model MBeans)同样也是动态MBeans,这类MBeans是完全

可配置的,在运行期间进行自我声明;它们为资源动态工具提供一个一般

性的,有默认行为的MBeans类。

在前一篇中的Hello、HelloMBean就是一个标准MBeans(Standard MBeans)。后面接下来的几篇,我们会继续介绍其他几种MBean。

3、Notification的使用

一、简介

Mbean之间的通信是必不可少的,Notification就起到了在Mbean之间沟通桥梁的作用。JMX notification 由四部分组成:

?Notification 这个相当于一个信息包,封装了需要传递的信息

?Notification broadcaster 这相当于一个广播器,把消息广播出去

?Notification listerner 这是一个监听器,用于监听广播出来的Notification消息

?Notification filter 这是一个过滤器,过滤掉不需要的Notification 消息

Notification broadcaster不需要我们实现,JMX的内部已经有了。Notification filter一般也很少用。下面的例子主要用到了Notification、Notification listerner。

在第一篇的Hello中有一个printHello(String whoName)方法,意思根据碰到的是谁来打招呼,比如:

Jack从对面走过来,说:“hi”

我们回之以礼,说:“Hello, jack”

首先这需要Jack先说一个hi(相应一个操作方法),然后他说的话封装成声波(相当Notification消息包)传递出去。然后我们还要给Jakc装上一个监听器(Hello的耳朵??^_^),这个监听器将捕捉到Jack的声波语音包,并进行相应处理,即说“Hello, jack”。

好,我们看看如何实现的:

1、Jack类及其相应的MBean

我们把Jack写成一个MBean,如下:

java 代码

1.import javax.management.Notification;

2.import javax.management.NotificationBroadcasterSupport;

3.public class Jack extends NotificationBroadcasterSupport i

mplements JackMBean {

4.private int seq = 0;

5.public void hi() {

6.Notification n = new Notification(//创建一

个信息包

7."jack.hi",//给这个Notification

起个名称

8.this, //由谁发出的

Notification

9.++seq,//一系列通知中的序列号,可

以设任意数值

10. System.currentTimeMillis(),//发

出时间

11. "Jack");//发出的消息文

12. //发出去

13. sendNotification(n);

14. }}

15. }

16.}

?必需继承NotificationBroadcasterSupport

?此类只有一个hi方法,方法只有两句:创建一个Notification消息包,然后将包发出去

?如果你还要在消息包上附加其他数据,Notification还有一个setUserData方法可供使用

2、接下来是他的MBean

java 代码

1.public interface JackMBean {

2.public void hi();

3.}

3、创建一个Listener,监听到的Notification消息包将由此类负责处理。java 代码

1.import javax.management.Notification;

2.import javax.management.NotificationListener;

3.public class HelloListener implements NotificationListener

{

4.public void handleNotification(Notification n, Obje

ct handback) {

5.System.out.println("type=" + n.getType());

6.System.out.println("source=" + n.getSource())

;

7.System.out.println("seq=" + n.getSequenceNumb

er());

8.System.out.println("send time=" + n.getTimeS

tamp());

9.System.out.println("message=" + n.getMessage(

));

10. if (handback != null) {

11. if (handback instanceof Hello) {

12. Hello hello = (Hello) handb

ack;

13. hello.printHello(n.getMessage()

);

14. }

15. }

16. }}

4、修改HelloAgent如下:

java 代码

1.import javax.management.MBeanServer;

2.import javax.management.MBeanServerFactory;

3.import javax.management.ObjectName;

4.import https://www.sodocs.net/doc/da16982174.html,m.HtmlAdaptorServer;

5.public class HelloAgent {

6.public static void main(String args[]) throws Exc

eption{

7.MBeanServer server = MBeanServerFactory.crea

teMBeanServer();

8.ObjectName helloName = new ObjectName("chen

gang:name=HelloWorld");

9.Hello hello=new Hello();

10. server.registerMBean(hello, helloName);

11. ObjectName adapterName = new ObjectName("He

lloAgent:name=htmladapter,port=8082");

12. HtmlAdaptorServer adapter = new HtmlAdaptor

Server();

13. server.registerMBean(adapter, adapterName);

14. Jack jack = new Jack(); //重点

15. server.registerMBean(jack, new ObjectName("He

lloAgent:name=jack")); //重点

16. jack.addNotificationListener(new HelloListener

(), null, hello); //重点

17. adapter.start();

18. System.out.println("start.....");

19. }}

三、运行

1、先运行HelloAgent启动服务,再打开浏览器输入网

址:http://localhost:8082/

2、进入“name=jack”项,然后单击“hi”按钮来执行它。

四、总结

Notification和Java的事件模型是一样的,另外如果你买了《Eclipse从入门到精通》,你会发现第22.4节也使用了和Notification和Java的事件模型相同的设计方式。Notification在我们的实际项目中也用到了,像我们现在的给移动做的项目中(基于JMX实现),分散在各地方的工作站的日志,就是通

过Notification方式,把每条产生的日志封装在 Notification中实时发回主控服务器的。有机会我会发这一系统的关于日志的设计方案写一下,它实现了对各地工作站的集中的、实时的监控,非常实用。

4、动态MBean:DynamicMBean

一、前言

动态MBean是在运行期才定义它的属性和方法,也就是说它有什么属性和方法是可以动态改变的。动态MBean主要利用一些辅助类(构造函数类MBeanConstructorInfo、属性类MBeanAttributeInfo、方法类MBeanOperationInfo)来完成这个功能,所有的动态MBean必须实现DynamicMBean接口。DynamicMBean写好后,使用方法和第一篇文章中普通的MBean一样。

给出一个动态MBean的实例,这个实例最初动态构了一个Name属性及一个print方法,当我们执行它的print方法之后,又给此MBean新增了一个print1方法。实例的代码如下:

二、实例

1、HelloDynamic类

java 代码

1.import https://www.sodocs.net/doc/da16982174.html,ng.reflect.Constructor;

2.import java.util.Iterator;

3.import javax.management.Attribute;

4.import javax.management.AttributeList;

5.import javax.management.DynamicMBean;

6.import javax.management.MBeanAttributeInfo;

7.import javax.management.MBeanConstructorInfo;

8.import javax.management.MBeanException;

9.import javax.management.MBeanInfo;

10.import javax.management.MBeanNotificationInfo;

11.import javax.management.MBeanOperationInfo;

12.import javax.management.MBeanParameterInfo;

13.import javax.management.ReflectionException;

14.

15./**

16. * @author Sunny Peng

17. * @add a feature for dynamic add operation

18. * @version 1.0

19. */

20.public class HelloDynamic implements DynamicMBean {

21. //这是我们的属性名称

22. private String name;

23. private MBeanInfo mBeanInfo = null;

24. private String className;

25. private String description;

26. private MBeanAttributeInfo[] attributes;

27. private MBeanConstructorInfo[] constructors;

28. private MBeanOperationInfo[] operations;

29. MBeanNotificationInfo[] mBeanNotificationInfoArray;

30.

31. public HelloDynamic() {

32. init();

33. buildDynamicMBean();

34. }

35.

36. private void init() {

37. className = this.getClass().getName();

38. description = "Simple implementation of a

dynamic MBean.";

39. attributes = new MBeanAttributeInfo[1];

40. constructors = new MBeanConstructorInfo[1];

41. operations = new MBeanOperationInfo[1];

42. mBeanNotificationInfoArray = new MBeanNotifi

cationInfo[0];

43. }

44.

45. private void buildDynamicMBean() {

46. //设定构造函数

47. Constructor[] thisconstructors = this.getCla

ss().getConstructors();

48. constructors[0] = new MBeanConstructorInfo("

HelloDynamic(): Constructs a HelloDynamic object", thiscon structors[0]);

49. //设定一个属性

50. attributes[0] = new MBeanAttributeInfo("Name

", "https://www.sodocs.net/doc/da16982174.html,ng.String", "Name: name string.", true, true, false);

51. //operate method 我们的操作方法是print

52. MBeanParameterInfo[] params = null;//无参

53. operations[0] = new MBeanOperationInfo("prin

t", "print(): print the name", params, "void", MBeanOper https://www.sodocs.net/doc/da16982174.html,);

54. mBeanInfo = new MBeanInfo(className, descri

ption, attributes, constructors, operations, mBeanNotificat ionInfoArray);

55. }

56.

57. //动态增加一个print1方法

58. private void dynamicAddOperation() {

59. init();

60. operations = new MBeanOperationInfo[2];//设

定数组为两个

61. buildDynamicMBean();

62. operations[1] = new MBeanOperationInfo("prin

t1", "print1(): print the name", null, "void", MBeanOper https://www.sodocs.net/doc/da16982174.html,);

63. mBeanInfo = new MBeanInfo(className, descri

ption, attributes, constructors, operations, mBeanNotificat ionInfoArray);

64. }

65.

66. public Object getAttribute(String attribute_name) {

67. if (attribute_name != null)

68. return null;

69. if (attribute_name.equals("Name"))

70. return name;

71. return null;

72. }

73.

74. public void setAttribute(Attribute attribute) {

75. if (attribute == null)

76. return;

77. String Name = attribute.getName();

78. Object value = attribute.getValue();

79. try {

80. if (Name.equals("Name")) {

81. // if null value, try and

see if the setter returns any exception

82. if (value == null) {

83. name = null;

84. // if non null valu

e, make sure it is assignable to the attribute

85. } else if ((Class.forName("j

https://www.sodocs.net/doc/da16982174.html,ng.String")).isAssignableFrom(value.getClass())) {

86. name = (String) valu

e;

87. }

88. }

89. } catch (Exception e) {

90. e.printStackTrace();

91. }

92. }

93.

94. public AttributeList getAttributes(String[] attribut

eNames) {

95. if (attributeNames == null)

96. return null;

97. AttributeList resultList = new AttributeLis

t();

98. // if attributeNames is empty, return an

empty result list

99. if (attributeNames.length == 0)

100.return resultList;

101.for (int i = 0; i < attributeNames.

length; i++) {

102.try {

103.Object value = getAttri bute(attributeNames[i]);

104.resultList.add(new Attrib ute(attributeNames[i], value));

105.} catch (Exception e) { 106. e.printStackTrace(); 107.}

108.}

109.return resultList;

110.}

111.

112.public AttributeList setAttributes(AttributeList attributes) {

113.if (attributes == null)

114.return null;

115.AttributeList resultList = new Attribu teList();

116.// if attributeNames is empty, nothin

g more to do

117.if (attributes.isEmpty())

118.return resultList;

119.// for each attribute, try to set i t and add to the result list if successfull

120.for (Iterator i = attributes.iterator( ); i.hasNext();) {

121.Attribute attr = (Attribute) i .next();

122.try {

123.setAttribute(attr); 124.String name = attr.getN ame();

125.Object value = getAttri bute(name);

126.resultList.add(new Attrib ute(name, value));

127.} catch (Exception e) { 128. e.printStackTrace(); 129.}

130.}

131.return resultList;

132.}

133.

134.public Object invoke(String operationName, Obj ect params[], String signature[]) throws MBeanException, ReflectionException {

135.// Check for a recognized operation name and call the corresponding operation

136.if (operationName.equals("print")) {

137.//具体实现我们的操作方法print

138.System.out.println("Hello, " + name + ", this is HellDynamic!");

139.dynamicAddOperation();

140.return null;

141.} else if (operationName.equals("print1 ")) {

142.System.out.println("这是动态增加的一方法print1");

143.return null;

144.} else {

145.// unrecognized operation name:

146.throw new ReflectionException(ne w NoSuchMethodException(operationName), "Cannot find the o peration " + operationName + " in " + className);

147.}

148.

149.}

150.

151.public MBeanInfo getMBeanInfo() {

152.return mBeanInfo;

153.}

154.}

说明:

?实现于接口DynamicMBean

?借助于各种辅助类完成一个类的构造。构造函数类

MBeanConstructorInfo、属性类MBeanAttributeInfo、方法类

MBeanOperationInfo

?这里所有public方法是实现于DynamicMBean的。主要提供:setAttribute 设置属性、getAttribute 取得属性、setAttributes设置一组属性、

getAttributes取得一组属性、invoke方法调用、getMBeanInfo

MBeanServer由这个方法得到关键的MBean类的构造信息。

2、HelloAgent类

前面说了HelloDynamic和普通MBean的使用方法是一样的,因此HelloAgent和第一篇的HelloAgent基本一样,就是把Hello改成HelloDynamic 而已。为了实例完整,也一并帖出来吧。

java 代码

1.import javax.management.MBeanServerFactory;

2.import javax.management.ObjectName;

3.import https://www.sodocs.net/doc/da16982174.html,m.HtmlAdaptorServer;

4.public class HelloAgent {

5.public static void main(String[] args) throws Exc

eption {

6.MBeanServer server = MBeanServerFactory.crea

teMBeanServer();

7.ObjectName helloName = new ObjectName("chen

gang:name=HelloDynamic");

8.HelloDynamic hello = new HelloDynamic();

9.server.registerMBean(hello, helloName);

10. ObjectName adapterName = new ObjectName("He

lloAgent:name=htmladapter,port=8082");

11. HtmlAdaptorServer adapter = new HtmlAdaptor

Server();

12. server.registerMBean(adapter, adapterName);

13. adapter.start();

14. System.out.println("start.....");

15. }

16. }

17.

3、运行

先运行HelloAgent。再打开浏览器,输入网址:http://localhost:8082/。单击进入“name=HelloDynamic ”项,执行print方法后再回到上一页面你会发现又多了一个print1方法。

4、总结

动态MBean的代码稍显复杂,但对于一些特殊需求的情况,它将显示出强大威力。而且它还是模型MBeans(Model MBeans)的基础。不过在一般的项目中,动态MBean还是用得比较少,所谓利器深藏之而不用,非常时方现光芒。

5、用Apache的commons-modeler来辅助开发JMX

一、前言

每一个MBean都要有一个接口,比如前面的Hello要有一个HelloMBean接口。要多维护一个接口,的确是件麻烦的事。 Apache的commons-modeler利用JMX中的动态MBean原理很好的解决了这一问题,commons-modeler使用得我们可以只写Hello,而不用写HelloMBean这个接口。不过这是有代价的,它要求我们写一个mbean的xml描述文件(唉,少了一件事,却又多出另一件事来)。但commons-modeler还是有优点的,就是它让mbean的装配更加灵活,把多个mbean的装配都集中在一个XML文件里来了。

开始实例之前,你需要先去apache网站下载commons-modeler,以及modeler的依赖项目commons-logging。下载网址为:

https://www.sodocs.net/doc/da16982174.html,/site/downloads/downloads_commons.html,下载的文件是ZIP

压缩包,解压后找到commons-logging.jar和commons-modeler.jar。如果在DOS下用命令行开发,则把这两个JAR包加入到classpath系统变量中。如果你用Eclipse开发,则把JAR包加入到项目属性的Libratries(库)引用中。

二、HelloWorld实例

我们以本系统的第一篇“1、JMX的Hello World”为例,来重新实现一次。

1、Hello.java的代码不变(注:为了在Eclipse上和原来的Hello文件放在不同的地方,我把新Hello放到了mbean.modelbean包),如下:

java 代码

1.package mbean.modelbean;

2.

3.import mbean.standard.HelloMBean;

4.

5.public class Hello implements HelloMBean {

6.private String name;

7.public String getName() {

8.return name;

9.}

10. public void setName(String name) {

11. https://www.sodocs.net/doc/da16982174.html, = name;

12. }

13. public void printHello() {

14. System.out.println("Hello World, " + name);

15. }

16. public void printHello(String whoName) {

17. System.out.println("Hello , " + whoName);

18. }

19.}

2、MBean不用写了,但需要写一个XML描述文件。文件名任取,这里取名为:mbeans-descriptors

xml 代码

1.

2.

3.

"chengang" group="helloGroup" type="mbean.modelbean.Hello">

4.

type="https://www.sodocs.net/doc/da16982174.html,ng.String" writeable="true"/>

5.

6.

7.

这里只对标签做一下说明:

* name mbean在xml中的唯一标识,不一定要和类同名

* description mbean的注释说明信息

* domain mbean所属域

* group mbean所属组

* type mbean的类全名(包名+类名)

* classname 指定实现代理功能的ModelMbean的全名,如果不指定则默认为BaseModelMBean

3、接下来改写HelloAgent

java 代码

1.package mbean.modelbean;

2.

3.import java.io.InputStream;

4.import javax.management.MBeanServer;

5.import javax.management.ObjectName;

6.import javax.management.modelmbean.ModelMBean;

7.import https://www.sodocs.net/doc/da16982174.html,mons.modeler.ManagedBean;

8.import https://www.sodocs.net/doc/da16982174.html,mons.modeler.Registry;

9.import https://www.sodocs.net/doc/da16982174.html,m.HtmlAdaptorServer;

10.

11.public class HelloAgent {

12. public static void main(String[] args) throws Exc

eption {

13. //基于xml中的信息构建一个Registry

14. Registry registry = Registry.getRegistry(nul

l, null);

15. InputStream stream = HelloAgent.class.getRes

ourceAsStream("Mbeans-descriptors.xml");

16. registry.loadMetadata(stream);

17. stream.close();

18. //由Registry得到一个MBeanServer

19. MBeanServer server = registry.getMBeanServer

();

20.

21. //得到Hello在描述文件中的信息类,对应于xml文件

标签的name属性。

22. ManagedBean managed = registry.findManagedBe

an("Hello");

23. //创建ObjectName

24. ObjectName helloName = new ObjectName(manag

ed.getDomain() + ":name=HelloWorld");

25. //得到ModelMBean

26. ModelMBean hello = managed.createMBean(new

Hello());

27. //注册MBean

28. server.registerMBean(hello, helloName);

29.

30. ObjectName adapterName = new ObjectName("He

lloAgent:name=htmladapter,port=8082");

31. HtmlAdaptorServer adapter = new HtmlAdaptor

Server();

32. server.registerMBean(adapter, adapterName);

33. adapter.start();

34. System.out.println("start.....");

35. }

36.}

HelloAgent是效复杂的地方,我们来和以前的HelloAgent逐步比较一下,前后有什么不同:

(1)首先,新的HelloAgent需要将xml信息读入到Registry对象中,这是旧HelloAgent所没有的。

Registry registry = Registry.getRegistry(null, null);

InputStream stream =

HelloAgent.class.getResourceAsStream("Mbeans-descriptors.xml"); registry.loadMetadata(stream);

stream.close();

(2)接着创建MBeanServer的方式也不同了

现在:MBeanServer server = registry.getMBeanServer();

以前: MBeanServer server = MBeanServerFactory.createMBeanServer();

(3)Hello相应的ObjectName创建也略不相同。主要是域名在XML描述文件里设置好了。

现在:ManagedBean managed = registry.findManagedBean("Hello");

ObjectName helloName = new ObjectName(managed.getDomain() + ":name=HelloWorld");

以前:ObjectName helloName = new ObjectName("chengang:name=HelloWorld")

(4)得到MBean的方式也不同,这里就是关键的不同点

现在:ModelMBean hello = managed.createMBean(new Hello());

以前:Hello hello = new Hello();

注意:为什么现在要比以前多一个createMbean步骤呢,就是因为现在的写法并没有写Mbean,所以需要动态才需要生成一个。而以前就直接把 new Hello()注册到mbean server就可以了,server会自动找到它的HelloMBean接口文件。

也就上面四点区别,其他代码完全一样。测试和查看效果的方法和以前一样,在此不累述了。

commons Modeler为Hello动态生成了一个MBean接口:BaseModelBean

参考资料

用Commons Modeler 开发JMX应用

Modeler组件是Jakarta Commons 项目针对Model MBeans提供的一个便利的开发组件。

首先介绍一下基本的概念:Managed bean简称Mbean,是对可被管理的资源的抽象定义,ModelBean是JMX定义的Mbean中动态和灵活的一种。但是要实现它开发人员必须设置大量的Metadata信息。Modeler组件针对ModelBean的开发,通过采用xml来定义metadata的方式来简化了ModelBean的开发强度,同时它和提供了注册的支持和缺省的ModelMbean的支持。这些我们都将在下面的例子中看到。另外关于JMX和ModelMBean的介绍有很多可以参考。这里都不提了。

下面主要通过例子来写一下如何使用它进行JMX开发。

在实际开发中,我们都是首先定义需要被管理的资源对象,然后把它注册到MBeanServer中进行发布。最后再通过客户端访问。

所以我的例子也通过这个来完成。

1.资源对象和MBean的实现

首先编写一个需要管理的对象。该对象很简单有一个属性和一个操作。public class TestBean {

private String oneAttr;

public String getOneAttr(){

return "one attribute be testing";

}

public void setOneAttr(String attr){

this.oneAttr = attr;

}

public String toString(){

return "toString be testing";

}

}

根据需要被管理的要求编写Mbeans-descriptors.xml

description="the test bean"

domain="mydomain"

group="testGroup"

type="mbeans.TestBean">

description="one Attr to be tested"

type="https://www.sodocs.net/doc/da16982174.html,ng.String"

writeable="true"/>

description="one Oper to be tested"

impact="INFO"

returnType="String">

通过这个xml文件的定义就描述了ModelBean所需要的metadata信息和一个基本的ModelMBean的实现。

关于这个xml文件有几个需要说明的地方:

的属性classname,name和type,

name属性是每个Mbean被Registry对象注册的对象名。

type属性是是真正被管理资源的全名(包括包名)。

classname属性是用户扩展的用于实现代理功能的ModelMbean的全

中文版word基础教程

W o r d 2003基础教程 编 撰 花 椒 文 刀 版权归属:中国盲文出版社信息无障碍中心盲人挚友聊天室 前 言 结合阳光读屏软件强大的Word 朗读功能, 由信息无障碍中心开办的于2008年11月至 2009年3 月,推出在线《Word2003基础讲座》。同期,我们将讲座内容编纂成册,免费提供给 阳光软件的广大用户,以便查阅。 本教程用Word2003编写, 您可以通过单击目录快速跳转到需要查阅的文本,具体操作方法是:用上下光标逐行朗读目录,听到您想查阅的条目后,按下 Ctrl+小键盘的斜杠键,这样,光标会自动跳转到目录对应的文本,以方便您的查阅,同时,在阅读过程中,教程所提及的所有操作,您均可在当前窗口尝试,当然,为了保持教程的完整,建议您在关闭本 教程时选择不保存修改。 本教程由阳光软件免费提供,版权归属中国盲文出版社信息无障碍中心盲人挚友聊天室, 请勿用于商业用途,违者必究。

目录 第一章 初识中文版Word2003 中文版word2003是微软公司推出的中文版office2003软件套装中的重要组成部分,它具有 强大的文本编辑和文件处理功能,是实现无纸化办公和网络办公不可或缺的应用软件之一。 第一节安装、启动和退出程序 一、安装程序 安装word2003和安装其它软件并无二致,需要说明一下的是光盘版的安装。当您将中文版 office2003光盘放入光驱后,请不要自动播放,因为自动播放会弹出图形化的安装界面,读 屏软件无法操作。您可以在插入光盘后,打开“我的电脑”找到CD驱动器,application键 弹出快捷菜单,通过“打开(O)菜单”来打开光盘,然后在列表中选中office文件夹,打开 以后,列表中出现几个文件夹,由于版本不同,文件夹数量和名称可能会略有区别,不过没 关系,在这些文件夹中寻找setup.exe并回车执行,您就能顺利地用键盘完成安装操作了。 二、启动程序 按下Windows键弹出“「开始」菜单”,展开“所有程序(P)菜单”后。上下光标到 “MicrosoftOffice子菜单”,右光标展开该子菜单后,上下光标找到 “MicrosoftOfficeWord2003菜单”回车即可启动Word程序。另外,当您在资源管理器中选 择任意一个后缀名为.doc的文档回车时,计算机也会为您启动word程序,同时打开您选中 的文档。 三、退出程序 在程序窗口按下快捷键:“Alt+F4”是退出程序最简便的方法。当然您还可以在程序窗口按下 Alt键激活菜单栏,下光标展开“文件(F)子菜单”并找到到“退出(X)菜单”回车,或在程 序窗口按下“Alt+空格”弹出控件菜单,上下光标找到“关闭(c)菜单”回车即可退出程序。

Scratch2.0入门中文使用教程

儿童编程 SCRATCH2.0入门中文使用教程 目录: 1. Scratch的简介 第1课下载与安装 第2课初识Scratch 2.Scratch基础课程 第3课让角色动一动 第4课键盘控制 第5课迷宫程序 第6课会飞的巫婆 第7课三角形的面积 第8课造型切换---人物走动 第9课移动人物教师进阶使用 第10课判断人物位置 3. Scratch进阶课程--打蝙蝠 3-1 第一节课 3-2 第二节课 3-3 第三节课

4. scratch进阶课程2-打地鼠 4-1 设计背景、铁锤及地鼠 4-2 撰写地鼠的程序 4-3 撰写铁锤程序 4-4 分数的计算 5. 接球游戏 5-1 设计球部份的程序 5-2 人物部份的程序 5-3 程序计分 5-4 扣分的构想 6.如何分享SCRATCH作品 7.如何把sb2文件转化成swf格式的flash文件

SCRATCH2.0入门中文使用教程 1. Scratch的简介 Scratch是 MIT (麻省理工学院) 发展的一套新的程序语言,可以用来创造交互式故事、动画、游戏、音乐和艺术。很适合8岁以上儿童使用,目前1.4版已经完全支持中文界面,更方便使用,完全不用背指令,使用积木组合式的程序语言,让学习变得更轻松,并充满乐趣。 官方网站:https://www.sodocs.net/doc/da16982174.html,/ 目前已经推出2.0版本,支持在线和离线模式。 由于国外网站速度较慢,gateface门面,已经集成了scratch的程序,所以只要安装了伽卡他卡电子教室(15.5以上版本)或这个gateface5.5以上版本,都有scratch,不用另外安装。(伽卡他卡电子教室集成了gateface,scratch在gateface的门面编辑器里,点击相应按钮,就可以启动scratch) Gateface门面中,集成的是离线程序,可以不用登录scratch网站,在本机使用。搜索伽卡他卡电子教室或者gateface都可以到官网或者华军下载。 分享SCRATCH作品的方法: 方法1:放到网站共享。SCRATCH网站,可以上传sb2格式的文件,这样,别人通过访问SCRATCH网站来访问你的作品,需要在SCRATCH

ArchiCAD入门中文教程

ArchiCAD中文教程 带领您进入ArchiCAD的世界,一步一步地创建一个虚拟建筑。 步骤 00 –介绍 (1) 步骤 01 –建立布局 (4) 步骤 02 –利用楼层 (18) 步骤 03 –完成建筑封顶 (23) 步骤 04 –发展设计 (28) 步骤 05 –添加门窗 (38) 步骤 06 –增加楼梯 (52) 步骤 07 –定义房间用途和空间 (57) 步骤 08 –增加最终细节 (61) 步骤 09 –测量和估算建筑成本 (65) 步骤 10 –向客户演示 (69) 步骤 00 –介绍 我们将向您展示使用一个物体模型是多么容易的一件事,30分钟内您将完成所有的建筑系统,为您的客户和项目合作伙伴递送高质量的设计和图纸,ArchiCAD 虚拟建筑使用的概念都是您司空见惯的,如如墙、门、楼板和屋顶等,我们的演示过程是符合您传统的设计方式的,不过不是二维中的绘图,而是使用了三维几何和其他属性的智能物体。 “The ArchiCAD in 30 minutes”光盘包含的是一个提供仅限制了保存和打印功能的该软件的演示版。安装好后,我们将带来您完成10个步骤,每个步骤的ArchiCAD 项目文件都可以在ArchiCAD 8.0 Demo/ArchiCAD in 30 minutes目录下找到,您

必须在一次完成一个步骤,因为您不能保存,您只需要打开对应步骤的文件,该步骤之前的所有步骤完成的内容都有。 您将学习创建一个小展览室,底楼是展览空间,二楼为画廊,以及其他一些员工和参观者所需要的日常设施。 建筑平面图如下,不同的用户界面元素将帮您完成建筑该项目。

AVL_FIRE中文入门教程

流场分析的基本流程(FIRE软件) ID:qxlqixinliang 一、网格自动生成 (2) 二、网格划分工具的使用 (5) 1、Mesh tools (5) 2、surface tools (7) 3、edge tools (7) 三、网格和几何信息工具 (8) 1、网格check (8) 2、Geo info (9) 四、流场求解求解器的设置 (9)

一、网格自动生成 根据电池包内部流场的特点,我们一般使用fame的网格自动生成和手动划分网格,两者相结合基本上能完成网格划分。对于电池数量较少的模型(如下图)完全可以用网格自动生成功能来实现网格划分。 下面介绍网格自动生成的流程: 1)准备面surface mesh和线edge mesh:要求:面必须是封闭曲面,一般FIRE中可以应用的是.stl的文件,在PRO/E,CATIA 等三维的造型软件中都可以生成;与面的处理相似的还要准备边界的线数据 2)Hybrid assistant,选择start new meshing,分别定义表面网格define surface mesh和线网格define edge mesh 3)然后进入高级选项fame advanced hybrid,在这里定义最大网格尺寸和最小网格尺寸,最大网格尺寸是最小网格尺寸的2^n倍 4)选择connecting edge,一般在计算域的进出口表面建立face selection,这样可保证edge 处的网格贴体,否则网格在几何的边角会被圆滑掉,另外还可以保证进出口面的网格方向与气流方向正交,有利于计算的精确性和收敛性。通过add添加上进出口的selection 即可。

MathType6.9中文基础教程之一

MathType6.9 中文入门教程 (一) MathType 实现“所见即所得”的工作模式,是一个强大的数学公式编辑器。它可以将编辑好的公式保存成多种图片格式或透明图片模式,可以很方便的添加或移除符号、表达式等模板(只需要简单地用鼠标拖进拖出即可),也可以很方便地修改模板。MathType 与常见的文字处理软件和演示程序配合使用,能够在各种文档中加入复杂的数学公式和符号,可用在编辑数学试卷、书籍、报刊、论文、幻灯演示等方面,是编辑数学资料的得力工具。 本教程为中文基础教程系列之一——手把手教你快速入门

练习一:分式与根式 (6) 打开MathType (6) 创建等式 (6) 1.输入y= (7) 2. 输入根式符号了 (7) 3.输入分式模板 (7) 4.输入数字 (8) 5.移动光标 (8) 6.输入数字 (8) 7.增加sinx (8) 8.插入点光标 (9) 9. 输入-c (9) 10.加上角标 (9) 11.输入数字2 (10) 12.点按±键 (10) 13.选择m (10) 14.输入tan x (10) 练习二:总和,上标和下标 (11) 1.打开一个Word文档 (11) 2.选择插入 (11) 3.输入 (11) 4.创建一个上标的位置 (12)

5.输入上标数字 (12) 6.移动插入点 (12) 7.输入= (12) 8.构建分式 (12) 9.插入点定位 (13) 10.使用Tab键 (13) 11.输入总和模板 (13) 12.插入一组圆括号 (13) 13.输入字母x (13) 14.给x附加下标 (13) 15.输入-x (13) 16.给x上增加一横线 (13) 17.按下Tab键 (13) 18.输入上标数字2 (14) 19.按下Tab键 (14) 20.按下Tab键 (14) 练习三:编辑修改练习二的等式 (15) 1.打开文档 (16) 2.选中项目 (16) 3.删除项目 (16) 4.输入字母 (16) 5.全选所有部分 (16)

PCSchematic中文入门教程

创建一个自动化方案 本章节将示范如何完成您的第一个自动化方案。它包括五个步骤,每一个步骤都有些范例, 将示范您如何完成设计方案中的各个部分。 本章内容简介 第一步:创建一个控制回路图,在设计方案和页面中输入数据,布置导线符 号,使用数据库及保存设计方案…………………………………………(第1页)第二步:创建一个主回路图,布置绘图模板,恰当地排列符号文本,移动电 路号,打印页面……………………………………………………………(第13页)第三步:自动导线编号………………………………………………………………(第21页) 第四步:布置元件……………………………………………………………………(第22页) 第五步:制作信息清单,并更新清单………………………………………………(第25页) 在PROJECT文件夹里,您会发现五个文件,其中的内容对应方案的各个部分。因此,您 既可以从头开始学习整个章节的内容,也可以选择一个主题,学习您感兴趣的部分。通过上 面的摘要,您可以选择想要学习的主题。 如果您想很快地完成这一章的学习,可以跳过文本框。 接下来,在位于第86页的“创建一个PLC方案”一节中,将详细介绍更多的功能。 一些预置的功能,例如设计方案章节和区域内的参考符号,没有在这部分阐述。在 演示方案.PRO这一设计方案中将应用其中一些功能。 如果您对“Windows”不熟悉,应在学习后面的课程前阅读“Windows”内容。 1.画控制回路图 打开一个已有的设计方案 点击位于程序工具栏的打开文件按钮(快捷键[Ctrl+o])。打开PROJECT文件夹,然后双 击设计方案文件开始2.pro。现在会打开这个设计方案文件。 ——如果您不熟悉如何使用“Windows”打开文件/方案,可以阅读位于26页的“Windows” 内容。 设计方案内容 设计方案开始2.pro中包含一些已经生成的页面: 1)页面F1是扉页。 2)页面I1是目录表。 3)页面1是画控制回路图页面。 4)页面2是零部件清单模板。 5)页面3是元器件清单模板。 6)页面4是接线端子清单模板。 比思 (香港,深圳,上海,北京) 电子有限公司 https://www.sodocs.net/doc/da16982174.html, kgs@https://www.sodocs.net/doc/da16982174.html, Page 1

Scratch20入门中文使用教程

SCRATCH2.0入门中文使用教程 目录: 1. Scratch的简介 第1课下载与安装 第2课初识Scratch 2.Scratch基础课程 第3课让角色动一动 第4课键盘控制 第5课迷宫程序 第6课会飞的巫婆 第7课三角形的面积 第8课造型切换---人物走动 第9课移动人物教师进阶使用 第10课判断人物位置 3. Scratch进阶课程--打蝙蝠 3-1 第一节课 3-2 第二节课 3-3 第三节课

4. scratch进阶课程2-打地鼠 4-1 设计背景、铁锤及地鼠 4-2 撰写地鼠的程序 4-3 撰写铁锤程序 4-4 分数的计算 5. 接球游戏 5-1 设计球部份的程序 5-2 人物部份的程序 5-3 程序计分 5-4 扣分的构想 6.如何分享SCRATCH作品 7.如何把sb2文件转化成swf格式的flash文件

SCRATCH2.0入门中文使用教程 1. Scratch的简介 Scratch是 MIT (麻省理工学院) 发展的一套新的程序语言,可以用来创造交互式故事、动画、游戏、音乐和艺术。很适合8岁以上儿童使用,目前1.4版已经完全支持中文界面,更方便使用,完全不用背指令,使用积木组合式的程序语言,让学习变得更轻松,并充满乐趣。 官方网站:https://www.sodocs.net/doc/da16982174.html,/ 目前已经推出2.0版本,支持在线和离线模式。 由于国外网站速度较慢,gateface门面,已经集成了scratch的程序,所以只要安装了伽卡他卡电子教室(15.5以上版本)或这个gateface5.5以上版本,都有scratch,不用另外安装。(伽卡他卡电子教室集成了gateface,scratch在gateface的门面编辑器里,点击相应按钮,就可以启动scratch) Gateface门面中,集成的是离线程序,可以不用登录scratch网站,在本机使用。搜索伽卡他卡电子教室或者gateface都可以到官网或者华军下载。 分享SCRATCH作品的方法: 方法1:放到网站共享。SCRATCH网站,可以上传sb2格式的文件,这样,别人通过访问SCRATCH网站来访问你的作品,需要在SCRATCH

ArcGIS中文基础教程

第一章GIS 的概念和需求 理解GIS的三种角度: GIS是一个用于管理、分析和显示地理信息的系统。地理信息可以通过一系列地理数据集来表达。而地理数据集则通过使用简单的,普通数据结构来为地理信息建模。GIS包含了一套用以处理地理数据的综合工具。 我们可以从多个角度来理解地理信息系统是如何工作于地理信息的: 1.从空间数据库的角度看:GIS是一个包含了用于表达通用GIS数据模型(要素、栅格、拓扑、网络等等)的数据集的空间数据库。 2.从空间可视化的角度看:GIS是一套智能地图,同时也是用于显示地表上的要素和要素间关系的视图。底层的地理信息可以用各种地图的方式进行表达,而这些表现方式可以被构建成“数据库的窗口”,来支持查询、分析和信息编辑。 3.从空间处理的角度看:GIS是一套用来从现有的数据集获取新数据集的信息转换工具。这些空间处理功能从已有数据集提取信息,然后进行分析,最终将结果导入到数据集中。 这三种观点在ESRI ArcGIS中分别用ArcCatalog(GIS是一套地理数据集的观点)、ArcMap(GIS是一幅智能的地图)和ArcToolbox(GIS是一套空间处理工具)来表达。这三部分是组成一个完整GIS的关键内容,并被用于所有GIS 应用中的各个层面。 从空间数据库的角度: GIS是世界上独一无二的一种数据库――空间数据库(Geodatabase)。它是一个“用于地理的信息系统”。从根本上说,GIS是基于一种使用地理术语来描述世界的结构化数据库 这里我们来回顾一些在空间数据库中重要的基本原理。 地理表现形式 作为GIS空间数据库设计工作的一部分,用户要指定要素该如何合理的表现。例如,地块通常用多边形来表达,街道在地图中是中心线(centerline)的形式,水井表现为点等等。这些要素会组成要素类,每个要素类都有共同的地理表现形式。 每个GIS数据集都提供了对世界某一方面的空间表达,包括: 基于矢量的要素(点、线和多边形)的有序集合

CHEMCAD中文入门教程

Chemcad在化工课程设计中的应用 指导教师:葛明兰 学生:高00-4班应伟斌 摘要:介绍了化工流程模拟软件Chemcad的特点、作用,以精馏过程的工艺设计为实例说明其应用。 关键词:Chemcad软件,设计,应用 化工课程设计是学习化工设计基础知识、培养学生化工设计能力的重要教学环节。计算机辅助化工过程设计以成为化工设计的基本手段,有效地利用化工模拟设计软件进行化工设计工作可以极大地提高工作效率。将模拟软件用于过程设计或过程模拟,对于当代的化工过程工程师已是一件很普通的工作。基于此,本院购进美国Chemstations公司化工流程模拟软件Chemcad。本文主要介绍该软件特点、模块功能作用,并以精馏过程的工艺设计实例较详细地对该软件的应用进行说明。 1.CHEMCAD软件概述: CHEMCAD系列软件是美国Chemstations公司开发的化工流程模拟软件。使用它,可以在计算机上建立与现场装置吻合的数据模型,并通过运算模拟装置的稳态或动态运行,为工艺开发、工程设计、优化操作和技术改造提供理论指导。 1.1使用CHEMCAD可以做的工作主要有以下几项: A.设计更有效的新工艺和设备使效益最大化 B.通过优化/脱瓶颈改造减少费用和资金消耗 C.评估新建/旧装置对环境的影响 D.通过维护物性和实验室数据的中心数据库支持公司信息系统 1.2CHEMCAD中的单元操作: CHEMCAD提供了大量的操作单元供用户选择,使用这些操作单元,基本能够满足一般化工厂的需要。对反应器和分离塔,提供了多种计算方法。ChemCAD可以模拟以下单元操作: 蒸馏、汽提、吸收、萃取、共沸、三相共沸、共沸蒸馏、三相蒸馏、电解质蒸馏、反应蒸馏、反应器、热交换器、压缩机、泵、加热炉、控制器、透平、膨胀机等50多个单元操作。 1.3热力学物性计算方法: CHEMCAD提供了大量的最新的热平衡和相平衡的计算方法,包含39种K值计算方法,和13种焓计算方法。K值方法主要分为活度系数法和状态方程法等四类,其中活度系数法包含有UNIFAC 、UPLM (UNIFAC for Polymers)、Wilson 、T. K. Wilson 、HRNM Modified Wilson 、Van Laar 、Non-Random Two Liquid (NRTL) 、Margules 、GMAC (Chien-Null) 、Scatchard-Hildebrand (Regular Solution)等。焓计算方法包括Redlich-Kwong 、 Soave-Redlich-Kwong 、Peng-Robinson 、API Soave-Redlich-Kwong 、Lee-Kesler 、 Benedict-Webb-Rubin-Starling 、Latent Heat 、Electrolyte 、Heat of Mixing by Gamma 等。 1.4使用CHEMCAD主要有以下步骤: A.画出您的流程图

Camtasia-studio-8.4中文基础教程之一

Camtasia Studio 8.4 中文基础教程之一 录制屏幕 Camtasia Studio 8.4 ............................................ ...................... 软件的欢迎(启动)界 面: .................................................... 录制 (Recorder) ........................................................... ......... 录制 PPT .................................................................... ............... 使用缺省设置首次录 制 .............................................................. 录制的预视窗 口 ..................................................................... ..... 改变预视的效 果 ..................................................................... ..... 其他录制选 项 ..................................................................... ......... Camtasia智能聚焦(SmartFocus)录制技巧 .......................... 录 制 ..................................................................... .................... Camtasia(TREC)格式录制文 件 ..............................................

完整版Scratch20入门中文使用教程

范文范例指导学习 儿童编程 SCRATCH2.0入门中文使用教程 目录: 1. Scratch的简介 第1课下载与安装 第2课初识Scratch 2.Scratch基础课程 第3课让角色动一动 第4课键盘控制 第5课迷宫程序 第6课会飞的巫婆 第7课三角形的面积 第8课造型切换---人物走动 第9课移动人物教师进阶使用 第10课判断人物位置 3. Scratch进阶课程--打蝙蝠 3-1 第一节课 3-2 第二节课 3-3 第三节课 版本整理分享word

范文范例指导学习 4. scratch进阶课程2-打地鼠 4-1 设计背景、铁锤及地鼠 4-2 撰写地鼠的程序 4-3 撰写铁锤程序 4-4 分数的计算 5. 接球游戏 5-1 设计球部份的程序 5-2 人物部份的程序 5-3 程序计分 5-4 扣分的构想 6.如何分享SCRATCH作品 7.如何把sb2文件转化成swf格式的flash文件 版本整理分享word 范文范例指导学习 SCRATCH2.0入门中文使用教程 1. Scratch的简介 Scratch是 MIT (麻省理工学院) 发展的一套新的程序语言,可以用来创造交互式故事、动画、游戏、音乐和艺术。很适合8岁以上儿童使用,目前1.4版已经完全支持中文界面,更方便使用,完全不用背指令,使用积木组合式的程序语言,让学习变得更轻松,并充满乐趣。 官方网站:https://www.sodocs.net/doc/da16982174.html,/

目前已经推出2.0版本,支持在线和离线模式。 由于国外网站速度较慢,gateface门面,已经集成了scratch 的程序,所以只要安装了伽卡他卡电子教室(15.5以上版本)或这个gateface5.5以上版本,都有scratch,不用另外安装。(伽卡他卡电子教室集成了gateface,scratch在gateface的门面编辑器里,点击相应按钮,就可以启动scratch) Gateface门面中,集成的是离线程序,可以不用登录scratch 网站,在本机使用。搜索伽卡他卡电子教室或者gateface 都可以到官网或者华军下载。 分享SCRATCH作品的方法: 方法1:放到网站共享。SCRATCH网站,可以上传sb2格式的文件,这样,别人通过访问SCRATCH网站来访问你的作品,需要在SCRATCH版本整理分享word 学习指导范文范例 注册账号,分享上传时需要登录账号。flashswf格式的将gateface门面,sb2格式文件转化成方法2:门面空间页面里,别人直接访问门面空间,就能文件,放在gateface 看 到你的作品。下载与安装1-1 gateface15.5以上版本或者如果已经安装了伽卡他卡电子 教室门面以上版本,不需要另外安装离线版本,直接从gateface门面5.5 编辑器里启动离线程序即可使用。SCRATCH网站使用。在线版本不用安装,直接登录

Scratch2.0入门中文使用教程

SCRATCH2.0入门中文使用教程目录: 1. Scratch的简介 第1课下载与安装 第2课初识Scratch 2.Scratch基础课程 第3课让角色动一动 第4课键盘控制 第5课迷宫程序 第6课会飞的巫婆 第7课三角形的面积 第8课造型切换---人物走动 第9课移动人物教师进阶使用 第10课判断人物位置 3. Scratch进阶课程--打蝙蝠 3-1 第一节课 3-2 第二节课 3-3 第三节课 4. scratch进阶课程2-打地鼠 4-1 设计背景、铁锤及地鼠 4-2 撰写地鼠的程序 4-3 撰写铁锤程序

4-4 分数的计算 5. 接球游戏 5-1 设计球部份的程序 5-2 人物部份的程序 5-3 程序计分 5-4 扣分的构想 6.如何分享SCRATCH作品 7.如何把sb2文件转化成swf格式的flash文件

SCRATCH2.0入门中文使用教程 1. Scratch的简介 Scratch是 MIT (麻省理工学院) 发展的一套新的程序语言,可以用来创造交互式故事、动画、游戏、音乐和艺术。很适合8岁以上儿童使用,目前1.4版已经完全支持中文界面,更方便使用,完全不用背指令,使用积木组合式的程序语言,让学习变得更轻松,并充满乐趣。 官方网站:https://www.sodocs.net/doc/da16982174.html,/ 目前已经推出2.0版本,支持在线和离线模式。 由于国外网站速度较慢,gateface门面,已经集成了scratch的程序,所以只要安装了伽卡他卡电子教室(15.5以上版本)或这个gateface5.5以上版本,都有scratch,不用另外安装。(伽卡他卡电子教室集成了gateface,scratch在gateface的门面编辑器里,点击相应按钮,就可以启动scratch) Gateface门面中,集成的是离线程序,可以不用登录scratch网站,在本机使用。搜索伽卡他卡电子教室或者gateface都可以到官网或者华军下载。 分享SCRATCH作品的方法: 方法1:放到网站共享。SCRATCH网站,可以上传sb2格式的文件,这样,别人通过访问SCRATCH网站来访问你的作品,需要在SCRATCH注册账号,分享上传时需要登录账号。 方法2:gateface门面,将sb2格式文件转化成swf格式的flash文件,放在gateface门面空间页面里,别人直接访问门面空间,就能看到

Tecplot_简单的中文入门教程

Tecplot的使用入门与技巧 汪继文 前言 Tecplot 是一种绘图视觉处理,使用Tecplot来驾驭您的资料会更显轻松无比,从简单的xy图到复杂的3d动态模拟,Tecplot可快捷地将大量的资料转成容易了解的图表及影象。表现方式有等高线、3d流线、网格、向量、剖面、切片、阴影、上色等… Tecplot是一种资料视觉化软件,可以进行科学计算,将电脑计算后的资料进行视觉化处理,便于更形象化地分析一些科学数据,是一种传达分析结果功能最强大的视觉化软件。Tecplot可以用来建立一个图形,二维数据的等高线和矢量图块。使用Tecplot可以很容易地在一页上建立图形和图块或者对它们进行定位。每一个图形都是在一个文本框中,而这些框架可以被复制再修改,这就会使你很容易地对一个数据集显示其不同的视图。 本文主要对Tecplot的使用做一个简单的说明,先简单介绍一下各菜单及其选项的一些基本而主要的功能,然后说明一下边框工具栏的基本用法,最后会分别就几个一维和二维图形来说明一下Tecplot中一些常用的概念和一些基本图形的处理方法。 目录 第一章菜单功能 (2) 1.1文件菜单 (2) 1.2编辑菜单 (2) 1.3视图菜单 (2) 1.4轴菜单 (2) 1.5域菜单 (3) 1.6xy菜单 (4) 1.7格式菜单 (4) 1.8数据菜单 (5) 1.9框架菜单 (5) 1.10 工作空间菜单 (6) 1.11 工具菜单 (6) 第二章边框工具栏选项的用法 (6) 第三章XY图形的绘制实例 (7) 3.1边框的编辑 (7) 3.2关于轴线坐标的编辑 (7) 3.3在XY图形中关于symbol的设置 (8) 3.4坐标调整 (8) 3.5 XY图形的存储与输出 (9) 3.6 两个XY图形的叠加 (9) 3.7 图形的复制 (10) 第四章2D和3D图形的绘制实例 (10) 4.1 文件头说明 (10) 4.2 有限元与数据的结构 (11) 4.3 等高线与3D图形的绘制 (13) 第一章:菜单功能 打开Tecplot之后,可以看到Tecplot的界面,最上面一行是菜单栏,且每一菜单下都有其对应的

中文DeltaV入门教程

1.DeltaV系统总述(略) 2. 教程总述 本教程讲述如何快速建立一个过程系统并使其运行。读者将会了解一些相关的基本概念,用于配置工作站和控制节点、定义I/O 、创建控制策略和操作画面。还可以从操作站的观察点查看系统。 硬件配置往往是一次性工作——而且在软件配置之前已经完成,所以,这一部分的信息我们放到靠后的章节中(第8章)。如果工作站还没配置,你可以看完本章之后,再看第8章。 如果工作站已经配置完成,你可以在没有操作站,和不设置I/O的情况下,进行第3章到第7章中的所有练习。不过,为了使练习更具有真实性,而且能够实现某些功能(如给操作站分配模块),读者最好进行硬件配置。 2.1 说在前面 本教程的练习,是针对一个水箱系统——包括测量液位、排水时控制流量——创建控制策略和操作画面。包括6个部分: 第3章,学习DeltaV浏览器,关于如何打开浏览器并使用导航功能进行查找。 第4章,学习创建和下载控制策略,介绍如何一步步创建水箱系统控制所需的4个模块,和用于定义水箱开关时序的时序功能图。 第5章,创建操作画面,学习DeltaV组态模式中的基本工具,以及如何用图片、面板、零件图、按钮、曲线图组成一个操作画面。 第6章,使用DeltaV运行模式,介绍如何在操作站的观察点上使用操作画面、修改参数、确认报警,以及进行其他设置。 第7章,采集和显示数据,学习如何用DeltaV工具和表格载入功能收集和显示现场设备的实时数据。 第8章,配置网络、装载和分配用户权限、设置帐户。一步步学习配置工作站、控制器和I/O点。 2.2例子:水箱系统 右图是一个假定的水箱控制系统,可以在排水时控制流 量,作为练习,在下文中,将为它创建一个控制策略和时 序。 2.2.1 控制模块 首先要做的,是为上图中的控制回路创建4个模块。椭 圆形的标注(LI-101、MTR-101等等),是给4个控制模 块取的名字。 LT-1、FT-1、XI-1等等,是位号(Device Tags),用来 标记变送器、阀,或其它I/O设备。 表2-1详细列出了所有的模块和I/O位号,这些在下文都将用到。 位号作为I/O组态的一部分,用于I/O卡通道,详见第8章。 2.2.2 时序功能图(SFC)

相关主题