JDK的dt.jar和Java BeanInfo接口
在JAVA_HOME/lib以下有两个比較重要的jar文件。tools.jar和dt.jar。
tools.jar在上篇文章中做了简单的介绍。这里来介绍下dt.jar。
在Oracle官方站点搜dt.jar,找到JDK and JRE File Structure这个页面,例如以下
https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/jdkfiles.html
有例如以下的一段话
/jdk1.7.0/lib
tools.jar
, which contains non-core classes for support of the tools and utilities in the JDK. Also includes dt.jar
,the DesignTime archive of BeanInfo files that tell interactive development environments (IDE's) how to display the Java components and how to let the developer customize them for an application.翻译一下:
/jdk1.7.0/lib
开发工具使用的文件。包含tools.jar和dt.jar。tools.jar包含支持JDK中各个工具的非核心的类。也包含dt.jar,dt.jar是设计时BeanInfo文件的归档,告诉可交互的开发环境怎样显示Java的组件和怎样让开发人员自己定义他们的应用程序。
dt.jar的解释中有两个点:
1.设计时(DesignTime)是跟执行时(Runtime)对象。简单点说就是一个是敲代码的时候,一个是跑程序的时候。
2.BeanInfo文件,关于这个BeanInfo文件,我们能够打开dt.jar文件看一下。
确实全是xxxBeanInfo的类。再细致看一下。前面的XXX都是Swing的各个组价。
首先查找下BeanInfo是干啥的。
在Oracle官网查找BeanInfo。找下以下的页面,发现BeanInfo是个接口,
https://docs.oracle.com/javase/7/docs/api/java/beans/BeanInfo.html
先看下doc是怎么说的,以下是BeanInfo接口的Java Doc翻译,
public interface BeanInfo
一个bean的详细实现者,假设想提供关于这个bean的明白的信息。他能够提供一个实现了BeanInfo接口的BeanInfo类,来提供关于这个Bean的方法,属性,事件等的明白的信息。
一个Bean的实现者不须要提供一系列完整的明白的信息。
你能够选择你想提供的信息,剩下的信息将通过低级的反射Bean类的方法和应用标准的设计模式自己主动分析来获取。
你有机会提供非常多不同的信息作为XyZDescriptor类的一部分。可是不必惊慌,事实上你仅仅须要提供各个构造方法须要的最小限度的核心信息。
更形象的信息能够去查看BeanInfo接口的几个getter方法。
JDK还提供了一个SimpleBeanInfo类,BeanInfo接口的一个简单的实现。能够简单看一下。
上面提到一句话,tools.jar和dt.jar都是给开发工具用的。以下看一下这套API是怎么用的。
首先写一个MyClass类
package com.highgo.test.beaninfo; public class MyClass {
private String field1; public String getField1() {
return field1;
} public void setField1(String field1) {
this.field1 = field1;
}
}
在写一个MyClassBeanInfo类。注意这个类的命名,MyClass+BeanInfo
package com.highgo.test.beaninfo; import java.awt.Image;
import java.beans.BeanDescriptor;
import java.beans.BeanInfo;
import java.beans.EventSetDescriptor;
import java.beans.MethodDescriptor;
import java.beans.PropertyDescriptor; public class MyClassBeanInfo implements BeanInfo{ @Override
public BeanDescriptor getBeanDescriptor() {
// TODO Auto-generated method stub
BeanDescriptor bd = new BeanDescriptor(MyClass.class);
bd.setName("MyName");
bd.setDisplayName("MyDisplayName");
bd.setShortDescription("Hi, My First BeanInfo Test!");
return bd;
} @Override
public EventSetDescriptor[] getEventSetDescriptors() {
// TODO Auto-generated method stub
return new EventSetDescriptor[0];
} @Override
public int getDefaultEventIndex() {
// TODO Auto-generated method stub
return 0;
} @Override
public PropertyDescriptor[] getPropertyDescriptors() {
// TODO Auto-generated method stub
return new PropertyDescriptor[0];
} @Override
public int getDefaultPropertyIndex() {
// TODO Auto-generated method stub
return 0;
} @Override
public MethodDescriptor[] getMethodDescriptors() {
// TODO Auto-generated method stub
return new MethodDescriptor[0];
} @Override
public BeanInfo[] getAdditionalBeanInfo() {
// TODO Auto-generated method stub
return new BeanInfo[0];
} @Override
public Image getIcon(int iconKind) {
// TODO Auto-generated method stub
return null;
} }
測试一下
import com.highgo.test.beaninfo.MyClass; public class Test{
public static void main(String[] args) throws IntrospectionException {
BeanInfo bi2 = Introspector.getBeanInfo(MyClass.class);
System.out.println(bi2.getBeanDescriptor());
}
}
控制台
java.beans.BeanDescriptor[name=MyName; displayName=MyDisplayName; shortDescription=Hi, My First BeanInfo Test!; beanClass=class com.highgo.test.beaninfo.MyClass]
IDE预计也基本上就是这么用的了。
JDK的dt.jar和Java BeanInfo接口的更多相关文章
- 安装java之后,找不到tools.jar 和dt.jar
可能很多初学者和我一样,在初次接触java开发的过程中,急于看到最终的结果,匆匆在网上下载了jdk之后,点击安装,结果等安装完,开始配置classpath时,发现jdk/lib下面根本就没有 tool ...
- linux环境下安装jdk(本文示例是jdk1.6.0_export JAVA_HOME=/usr/java/jdk1.6.0_45 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar45)
第一步:创建一个文件夹安装jdk(虽说地址一般自定义,但是为了方便查找请按照笔者建议目录 ):/usr/java 将jdk-6u45-linux-x64.bin文件放到 /usr/java 文件夹 ...
- JDK8- interface接口可以写方法体了-- 惊 dt.jar包等
基本上所有的Java教程都会告诉我们Java接口的方法都是public.abstract类型的,没有方法体的. 但是在JDK8里面,你是可以突破这个界限的哦. == 一个类实现某个接口,必须重写接口中 ...
- Java开发环境配置时的dt.jar与tools.jar是什么(转载)
你了解dt.jar吗 很多人在初学Java的时候,都要配置环境变量.在配置CLASSPATH的时候,都会加上一个当前目录.,还有两个jar:dt.jar和tools.jar.其实好多人都不了解这两个j ...
- JDK环境变量中dt.jar、tools.jar等变量值的作用
变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; tools.jar: 工具类 库,它跟我们程序中用到的 基础 ...
- JDK中rt.jar、tools.jar和dt.jar作用
dt.jar和tools.jar位于:{Java_Home}/lib/下,而rt.jar位于:{Java_Home}/jre/lib/下,其中: rt.jar是JAVA基础类库,也就是你在java d ...
- kafka运行找不到或无法加载主类 Files\Java\jdk1.8.0_131\lib\dt.jar;C:\Program
最近在研究Flink+kafka解决方案, kafka的安装首先需要安装zookeeper,在安装zookeeper是报错找不到或无法加载主类 Files\Java\jdk1.8.0_131\lib\ ...
- 转:linux下配置JDK提示tools.jar/dt.jar权限不够
原文:http://lkf009.iteye.com/blog/1327912 提示权限不够的原因:CLASSPATH=.;$JAVA_HOME/lib/tools.jar;$JAVA_HOME/li ...
- dt.jar设计时rt.jar运行时
很多人在初学Java的时候,都要配置环境变量.在配置CLASSPATH的时候,都会加上一个当前目录.,还有两个jar:dt.jar和tools.jar.其实好多人都不了解这两个jar的作用,尤其是dt ...
随机推荐
- hibernate 批量处理数据
批量处理数据是指处理大量数据的一个单独的事务. 在应用层批处理操作, 主要有以下方式: 通过 Session 通过 HQL 通过 StatelessSession 通过 JDBC API(仅仅要会用这 ...
- Linux如何用QQ?Linux下QQ使用的几种方案
在linux下如何使用QQ?在ubuntu11.10中如何使用QQ?或许有初涉linux的人这样问,我们可以看看ubuntusoft总结出来的几种在linux系统下用QQ的方法.前面的几种主要的方法都 ...
- IT行业为什么没有进度
参加工作多年了,来来回回参与了N多项目,大部分都是政府性的招标项目.每个项目都是顺利进行验收,在这些验收过的项目中大部分都或多或少都有一定的时间延期,每个项目都能够和合同或者需求说明书对应的上,但是真 ...
- [2014 Regional]牡丹江 H Hierarchical Notation 做题记录
主妇:老年人谁是炮灰牡丹江,我们的团队只是做同步大赛 他决定开爆震H什么时候,A 5min 1Y.I在该限制后,纠结了很久30min+ 1Y,神继续承担各种位置卡D在,hpp见B我认为这是非常熟悉的研 ...
- Android 高仿微信即时聊天 百度云为基础的推
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/38799363 ,本文出自:[张鸿洋的博客] 一直在仿微信界面,今天最终有幸利用百 ...
- LeerCode 123 Best Time to Buy and Sell Stock III之O(n)解法
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- [WebGL入门]二十四,补色着色
注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中假设有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,假设翻译有误,欢迎大家指 ...
- Oracle Instanc Client安装命令工具
条件 1.Linux RHEL 6.X X86_64操作系统 2.从安装Oracleserver的server此次收购Oracle相关文件(同OS) 软件下载 从Oracle包: 1) instan ...
- Android - 分享内容 - 给其他APP发送内容
创建一个intent时,必须要指定intent将要触发的操作.Android定义了很多操作,包括ACTION_SEND,就象可以猜到的一样,表示intent是把数据从一个activity发送给另一个, ...
- Android-管理Activity生命周期 -开始一个Activity
很多程序都是从main()方法开始启动的,和其他程序不同,android是在activity生命周期的特定状态的特定回调方法中初始化代码的.activity启动和销毁的时候都用很多回调方法. 这里将要 ...