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
Files used by the development tools. Includes 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预计也基本上就是这么用的了。

时间: 2024-10-11 12:48:44

JDK的dt.jar和Java BeanInfo接口的相关文章

安装java之后,找不到tools.jar 和dt.jar

可能很多初学者和我一样,在初次接触java开发的过程中,急于看到最终的结果,匆匆在网上下载了jdk之后,点击安装,结果等安装完,开始配置classpath时,发现jdk/lib下面根本就没有 tools.jar 和dt.jar 这两个包.作者在首次遇到这样的问题时,以为是下载的包有问题,于是重新下载了之后再安装,结果还是老样子.我相信你现在很可能遇到了类似的问题.好吧,那你就接着往下看,耐心一点. 问题的根本原因,可能是你和我一样,没有弄清两个概念:JDK和JRE.JDK是java开发核心组件,

JDK安装后 没有tools.jar 和dt.jar包的解决办法

今天花了几个小时弄JDK,安装后发现jdk\lib中没有tools.jar 和 dt.jar包,网上搜罗了很多解决办法,都没有解决问题.最后看到一个本质的解决方法,出现这个问题的原因是在JDK安装时将JDK和JRE放在了同一目录下,导致了文件的覆盖,致使tools.jar 和 dt.jar包被覆盖. 解决方法: 我的操作系统是win7,在安装JDK过程中,第二次选择目标文件夹是选择与第一次安装目录不同的文件夹目录下即可. 例如:第一次安装目录为c:\jdk 第二次安装目录为c:\jre 安装完后

JDK环境变量中dt.jar、tools.jar等变量值的作用

JAVA_HOME [plain] view plain copy 变量名:JAVA_HOME 变量值:E:\java\jdk7 用途:定义一个变量,供其他地方使用 PATH [plain] view plain copy 变量名:Path 变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 用途:让系统在任何路径下都可以识别java.javac.javap等命令 CLASSPATH [plain] view plain copy 变量名:CLASSPATH 变量值

Reahat5.5安装jdk、tomcat并部署Java项目

1 下载并安装jdk 虚拟机中安装Redhat5.5 64位企业版, 这里以jdk-7u75-linux-x64.tar.gz为例 在网上下载到这个版本的jdk,或者点击此处下载(访问密码 375a) 以root用户上传到linux系统,并授予其执行的权限 # mkdir /usr/java # cd /usr/java # tar -xvzf jdk-7u75-linux-x64.tar.gz # mv jdk1.7.0_75/ jdk7 # ls -l total 139056 drwxr-

如何安装JDK 7/8并进行Java编程

JDK还是JRE JRE(Java Runtime)是运行Java程序需要的.JDK(Java Development Kit)包含JRE和开发工具(比如编译器和调试器)是编写Java程序需要的,就是说编写Java程序需要JDK. 1. Windows上安装JDK Step 0(a):卸载JDK/JRE的旧版本 推荐使用最新版本的JDK,装多个版本会很凌乱的. “Control Panel” ⇒ Program and Features ⇒ 卸载“Java SE Development Kit”

内功心法 -- Java标记接口

写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------这篇博客主要来谈谈"Java标记接口"的相关知识,主要内容包括: 1. 概述 2. Serializable 3. Cloneable 4. RandomAccess --------------------------------------------------------------------1.概述 Ja

Java-----JDK中tools.jar、dt.jar和rt.jar的作用

1. tools.jar 位于{Java_Home}\lib下: 是系统用来编译一个类的时候用到的,即执行javac的时候用到 javac XXX.java实际上就是运行java -Calsspath=%JAVA_HOME%\lib\tools.jar xx.xxx.Main XXX.java javac就是对上面命令的封装 所以tools.jar 也不用加到classpath里面 2.dt.jar 位于{Java_Home}\lib下:是关于运行环境的类库,主要是swing的包   在用到sw

windows下更换jdk运行当前jar包处理命令一则

可在文本文档中新建以下内容 set JAVA_HOME=C:\jdk1.7.0_67set CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOMe%\lib\tools.jar;set Path=%JAVA_HOME%\bin;java -jar test.jar 保存为批处理文件,即可执行可执行jar包--test.jar

JAVA WEB接口开发简述

目录 1. JAVA WEB接口开发简述 1.1. 基本了解 1.2. 提供接口 1.3. 调用接口 1. JAVA WEB接口开发简述 1.1. 基本了解 当我们想去访问其他网站的接口时候,而又不想要登录验证等操作,那么可以选择使用平台提供的接口进行调用得到我们需要的信息.比如说,一个网站A有一个接口路径: http://192.168.10.119:8080/xmq/webservice/menu/search?ak=APP00013&token=yq6ZaljwYMa1x83r0hSHVh