Java开发工具详解:从运行到调试
在Java开发的过程中,有许多实用的工具可以帮助开发者更高效地完成工作。本文将详细介绍几个重要的Java开发工具,包括
appletviewer
、
javadoc
、
jar
和
jdb
,并通过具体的示例和操作步骤,帮助你更好地理解和使用这些工具。
1. appletviewer:Java小程序查看器
appletviewer
是一个用于运行需要Web浏览器的Java程序的工具,这些程序通常作为HTML文档的一部分呈现。使用
appletviewer
时,你可以将HTML文档作为命令行参数传入,例如:
appletviewer NewAuctions.html
如果参数是一个Web地址,
appletviewer
会加载该地址的HTML文档:
appletviewer http://www.javaonthebrain.com
当
appletviewer
加载HTML文档时,文档中的每个小程序都会在各自的窗口中开始运行,窗口的大小取决于小程序HTML标签中设置的
HEIGHT
和
WIDTH
属性。
需要注意的是,
appletviewer
不能用于查看HTML文档本身。如果你想查看小程序与文档其他内容的布局关系,必须使用支持Java的Web浏览器。
目前,Netscape Navigator和Microsoft Internet Explorer的当前版本不提供对Java小程序的内置支持,但可以从Sun Microsystems下载浏览器插件来获得支持。
在使用
appletviewer
运行小程序时,它的
Applet
下拉菜单提供了一些有用的选项:
-
Restart和Reload
:用于重新启动小程序的执行。
Restart
在重新启动前不会卸载小程序,而
Reload
会卸载并重新加载,相当于关闭并重新打开同一网页的小程序查看器。
-
Start和Stop
:直接调用小程序的
start()
和
stop()
方法。
-
Clone
:在新窗口中创建同一个小程序的副本。
-
Tag
:显示程序的
<APPLET>
或
<OBJECT>
标签,以及配置小程序的
<PARAM>
标签的HTML代码。
-
Info
:调用小程序的
getAppletInfo()
和
getParameterInfo()
方法,程序员可以实现这些方法来提供关于小程序及其参数的更多信息。
下面是一个示例小程序
AppInfo.java
:
import java.awt.*;
public class AppInfo extends javax.swing.JApplet {
String name, date;
int version;
public String getAppletInfo() {
String response = "This applet demonstrates the "
+ "use of the Applet’s Info feature.";
return response;
}
public String[][] getParameterInfo() {
String[] p1 = { "Name", "String", "Programmer’s name" };
String[] p2 = { "Date", "String", "Today’s date" };
String[] p3 = { "Version", "int", "Version number" };
String[][] response = { p1, p2, p3 };
return response;
}
public void init() {
name = getParameter("Name");
date = getParameter("Date");
String versText = getParameter("Version");
if (versText != null)
version = Integer.parseInt(versText);
}
public void paint(Graphics screen) {
Graphics2D screen2D = (Graphics2D) screen;
screen2D.drawString("Name: " + name, 5, 50);
screen2D.drawString("Date: " + date, 5, 100);
screen2D.drawString("Version: " + version, 5, 150);
}
}
可以使用以下HTML文件
AppInfo.html
来加载该小程序:
<applet code="AppInfo.class" height=200 width=170>
<param name="Name" value="Rogers Cadenhead">
<param name="Date" value="12/01/02">
<param name="Version" value="3">
</applet>
2. javadoc:Java文档生成工具
javadoc
是一个用于生成Java程序详细文档的工具,它以
.java
源代码文件或包名作为输入,生成HTML格式的文档。
为了让
javadoc
为程序创建完整的文档,需要在程序的源代码中使用一种特殊的注释语句。Java提供了一种更结构化的注释,可被
javadoc
工具读取,格式如下:
/** A descriptive sentence or paragraph.
* @tag1 Description of this tag.
* @tag2 Description of this tag.
*/
这种注释应该放在要文档化的程序元素(如类、变量、对象和方法)的正上方,简洁地解释该程序元素的作用。
以下是一个使用了详细注释的
AppInfo2.java
示例:
import java.awt.*;
/** This class displays the values of three parameters:
* Name, Date and Version.
* @author <a href="http://java24hours.com">Rogers Cadenhead</a>
* @version 3.0
*/
public class AppInfo2 extends javax.swing.JApplet {
/**
* @serial The programmer’s name.
*/
String name;
/**
* @serial The current date.
*/
String date;
/**
* @serial The program’s version number.
*/
int version;
/**
* This method describes the applet for any browsing tool that
* requests information from the program.
* @return A String describing the applet.
*/
public String getAppletInfo() {
String response = "This applet demonstrates the "
+ "use of the Applet’s Info feature.";
return response;
}
/**
* This method describes the parameters that the applet can take
* for any browsing tool that requests this information.
* @return An array of String[] objects for each parameter.
*/
public String[][] getParameterInfo() {
String[] p1 = { "Name", "String", "Programmer’s name" };
String[] p2 = { "Date", "String", "Today’s date" };
String[] p3 = { "Version", "int", "Version number" };
String[][] response = { p1, p2, p3 };
return response;
}
/**
* This method is called when the applet is first initialized.
*/
public void init() {
name = getParameter("Name");
date = getParameter("Date");
String versText = getParameter("Version");
if (versText != null)
version = Integer.parseInt(versText);
}
/**
* This method is called when the applet’s display window is
* being repainted.
*/
public void paint(Graphics screen) {
Graphics2D screen2D = (Graphics2D)screen;
screen.drawString("Name: " + name, 5, 50);
screen.drawString("Date: " + date, 5, 100);
screen.drawString("Version: " + version, 5, 150);
}
}
使用以下命令可以从
AppInfo2.java
源代码文件创建HTML文档:
javadoc -author -version AppInfo2.java
javadoc
会在与
AppInfo2.java
相同的文件夹中创建多个网页,这些网页将以与Sun官方Java 2类库文档相同的方式记录程序。
你还可以使用以下命令将文档生成到指定的文件夹:
javadoc -author -version -d C:\JavaDocs\ AppInfo2.java
除了上述示例中使用的标签,Java文档注释还支持以下标签:
-
@deprecated text
:表示该类、方法、对象或变量已被弃用,使用时
javac
编译器会发出弃用警告。
-
@exception class description
:用于抛出异常的方法,记录异常的类名和描述。
-
@param name description
:用于方法,记录参数的名称和参数可以包含的值的描述。
-
@see class
:指示另一个类的名称,将其转换为该类Java文档的超链接。
-
@see class#method
:指示另一个类的方法名称,用于直接链接到该方法的文档。
-
@since text
:指示方法或功能添加到类库的时间说明。
3. jar:Java文件归档工具
在部署Java程序时,跟踪程序所需的所有类文件和其他文件可能会很麻烦。
jar
工具可以将程序的所有文件打包成一个Java归档文件(JAR文件),也可以用于解包这些归档文件。
JAR文件可以使用Zip格式进行压缩,也可以不压缩打包。使用
jar
工具时,在命令行输入
jar
,后面跟上命令行选项和一系列文件名、文件夹名或通配符。
例如,将一个文件夹中的所有类文件和GIF图像文件打包成一个名为
Animate.jar
的Java归档文件:
jar cf Animate.jar *.class *.gif
其中,
c
选项表示创建Java归档文件,
f
选项表示指定归档文件的名称。
你还可以使用以下命令将特定文件添加到Java归档文件中:
jar cf MusicLoop.jar MusicLoop.class muskratLove.mp3 shopAround.mp3
将所有运行Java小程序所需的文件放在一个JAR文件中,可以更轻松地在Web上部署小程序。在HTML中使用
<APPLET>
或
<OBJECT>
标签时,可以使用
ARCHIVE
属性指定JAR文件的位置,例如:
<applet code="MusicLoop.class" archive="MusicLoop.jar" width=45 height=42>
</applet>
或者使用
<OBJECT>
标签:
<object code="MusicLoop.class" width=45 height=42>
<param name="archive" value="MusicLoop.jar">
</object>
4. jdb:Java调试器
jdb
是一个复杂的工具,用于帮助你查找和修复Java程序中的错误,还可以帮助你更好地理解Java解释器在程序运行时背后发生的事情。
在调试Java程序时,你可以选择不使用调试器,通常在Java编译器生成错误后,常见的做法是将源代码加载到编辑器中,找到错误消息中引用的行,并尝试找出问题。但当你开始寻找逻辑错误(更微妙的错误,不会阻止程序编译和运行)时,调试器就变得非常有用。
jdb
具有两个非常有用的功能:单步执行和断点。单步执行会在执行每一行代码后暂停Java程序,断点是程序执行将暂停的点,可以通过特定的代码行、方法调用或捕获的异常触发。
在使用
jdb
调试程序之前,需要使用
-g
选项编译程序,这样会在类文件中包含额外的信息,有助于调试。同时,不要使用
-O
选项,因为其优化技术可能会产生与程序源代码不直接对应的类文件。
4.1 调试应用程序
如果要调试一个应用程序,可以将Java类作为参数运行
jdb
工具,例如:
jdb WriteBytes
jdb
会加载该程序但不会立即开始运行,显示以下输出:
Initializing jdb...
>
在
>
提示符下输入命令来控制调试器。
设置断点可以使用
stop in
或
stop at
命令。例如,在
SellItem
类的
SetPrice
方法的第一行设置断点:
stop in SellItem.SetPrice
在
WriteBytes
类的第14行设置断点:
stop at WriteBytes:14
输入该命令后,可能会看到以下输出:
Deferring breakpoint WriteBytes:14
It will be set after the class is loaded.
可以使用
clear
命令查看当前设置的所有断点,使用
clear
命令并指定类名和行号可以移除断点。
使用
run
命令开始执行程序:
run WriteBytes
当程序到达断点时,可以使用以下命令进行调试:
-
list
:显示执行停止点的源代码行及其周围的几行代码。
-
locals
:列出当前正在使用或即将定义的局部变量的值。
-
print text
:显示指定变量、对象或数组元素的值。
-
step
:执行下一行代码并再次停止。
-
cont
:继续在程序停止的点运行程序。
-
!!
:重复上一个调试器命令。
调试完成后,使用
exit
命令结束调试会话。
4.2 调试小程序
不能直接使用
jdb
工具加载小程序进行调试,而是使用
appletviewer
的
-debug
选项,例如:
appletviewer -debug AppInfo.html
在使用
run
命令执行小程序之前,在
getAppletInfo
方法的第一行设置断点:
stop in AppInfo.getAppletInfo
开始运行小程序后,直到调用
getAppletInfo()
方法(通过选择
appletviewer
菜单中的
Applet
->
Info
),断点才会被触发。
4.3 高级调试命令
除了上述基本调试命令,
jdb
还提供了一些高级调试命令:
-
up
:向上移动栈帧,以便使用
locals
和
print
检查当前方法调用之前的程序状态。
-
down
:向下移动栈帧,检查方法调用之后的程序状态。
在Java程序中,经常会有一系列方法被调用的情况。在每个方法调用点,Java通过将所有对象和变量分组在一起跟踪该范围内的所有对象和变量,这种分组称为栈,程序运行时存在的各种栈称为栈帧。
通过使用这些工具,你可以更高效地开发、调试和部署Java程序。希望本文的介绍能帮助你更好地掌握这些工具的使用。
Java开发工具详解:从运行到调试
5. 工具使用总结与对比
为了更清晰地了解这些工具的特点和适用场景,下面通过表格进行总结对比:
| 工具名称 | 主要功能 | 输入 | 输出 | 适用场景 |
| — | — | — | — | — |
| appletviewer | 运行需要Web浏览器的Java小程序 | HTML文档或Web地址 | 运行小程序 | 开发和测试Java小程序,查看小程序运行效果 |
| javadoc | 生成Java程序的详细文档 | .java源代码文件或包名 | HTML格式的文档 | 为Java程序生成规范的文档,方便开发者和使用者了解程序 |
| jar | 将Java程序的文件打包成归档文件 | 文件名、文件夹名或通配符 | JAR文件 | 部署Java程序,减少文件数量,提高下载和运行速度 |
| jdb | 调试Java程序,查找和修复错误 | Java类 | 调试信息 | 开发过程中查找程序的逻辑错误和调试代码 |
6. 操作流程梳理
下面通过mermaid格式的流程图来梳理使用这些工具的一般操作流程。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B{选择工具}:::decision
B -->|appletviewer| C(准备HTML文档):::process
C --> D(运行appletviewer命令):::process
D --> E(查看小程序运行效果):::process
B -->|javadoc| F(准备.java源代码文件):::process
F --> G(编写文档注释):::process
G --> H(运行javadoc命令):::process
H --> I(查看生成的HTML文档):::process
B -->|jar| J(准备要打包的文件):::process
J --> K(运行jar命令打包):::process
K --> L(使用JAR文件部署程序):::process
B -->|jdb| M(使用 -g 选项编译程序):::process
M --> N(运行jdb命令加载程序):::process
N --> O(设置断点):::process
O --> P(运行程序并调试):::process
P --> Q(结束调试):::process
E --> R([结束]):::startend
I --> R
L --> R
Q --> R
7. 常见问题及解决方法
在使用这些工具的过程中,可能会遇到一些常见问题,下面为你列举并给出解决方法:
7.1 appletviewer相关问题
- 问题 :小程序无法正常运行,提示找不到类文件。
-
解决方法
:检查HTML文件中
code属性指定的类文件是否存在,并且类文件的路径是否正确。确保类文件与HTML文件在同一目录或在CLASSPATH指定的路径下。 - 问题 :小程序窗口大小不符合预期。
-
解决方法
:检查HTML文件中
<applet>标签的HEIGHT和WIDTH属性是否正确设置。
7.2 javadoc相关问题
- 问题 :生成的文档中没有显示注释信息。
-
解决方法
:检查源代码中的文档注释是否使用了正确的格式,即
/** ... */。确保注释位于要文档化的程序元素的正上方,并且使用了正确的标签。 - 问题 :文档生成到了错误的文件夹。
-
解决方法
:检查
javadoc命令中是否正确使用了-d选项指定目标文件夹,并且文件夹路径是否正确。
7.3 jar相关问题
- 问题 :JAR文件无法被浏览器识别。
-
解决方法
:确保使用的浏览器支持JAR文件,并且在HTML标签中正确使用了
ARCHIVE属性指定JAR文件的名称。 - 问题 :JAR文件中缺少某些文件。
-
解决方法
:检查
jar命令中指定的文件名、文件夹名或通配符是否正确,确保包含了所有需要的文件。
7.4 jdb相关问题
- 问题 :断点无法生效。
-
解决方法
:检查是否使用了
-g选项编译程序,确保类文件中包含了调试所需的额外信息。同时,检查设置断点的命令是否正确,例如stop in或stop at命令的参数是否正确。 - 问题 :调试过程中提示找不到源代码文件。
-
解决方法
:确保源代码文件(.java文件)存在于当前目录或
CLASSPATH指定的路径下,这样jdb才能在需要时显示源代码。
8. 实际案例应用
为了更好地理解这些工具的实际应用,下面通过一个简单的案例来展示如何综合使用它们。
假设我们要开发一个简单的Java小程序,用于显示用户输入的信息。
8.1 编写源代码
首先,编写Java源代码
UserInfo.java
:
import java.awt.*;
import javax.swing.*;
/**
* 该类用于显示用户输入的信息
* @author John Doe
* @version 1.0
*/
public class UserInfo extends JApplet {
/**
* 用户姓名
* @serial 用户输入的姓名
*/
String name;
/**
* 用户年龄
* @serial 用户输入的年龄
*/
int age;
/**
* 描述小程序的信息
* @return 描述小程序的字符串
*/
public String getAppletInfo() {
return "This applet displays user information.";
}
/**
* 描述小程序的参数信息
* @return 包含参数信息的二维字符串数组
*/
public String[][] getParameterInfo() {
String[] p1 = { "Name", "String", "User's name" };
String[] p2 = { "Age", "int", "User's age" };
String[][] response = { p1, p2 };
return response;
}
/**
* 初始化小程序,获取参数值
*/
public void init() {
name = getParameter("Name");
String ageText = getParameter("Age");
if (ageText != null) {
age = Integer.parseInt(ageText);
}
}
/**
* 绘制小程序界面,显示用户信息
* @param screen 绘图对象
*/
public void paint(Graphics screen) {
Graphics2D screen2D = (Graphics2D) screen;
screen2D.drawString("Name: " + name, 5, 50);
screen2D.drawString("Age: " + age, 5, 100);
}
}
8.2 编写HTML文件
创建
UserInfo.html
文件来加载小程序:
<applet code="UserInfo.class" height=200 width=170>
<param name="Name" value="John Doe">
<param name="Age" value="25">
</applet>
8.3 生成文档
使用
javadoc
工具为
UserInfo.java
生成文档:
javadoc -author -version UserInfo.java
8.4 打包文件
将
UserInfo.class
文件打包成JAR文件:
jar cf UserInfo.jar UserInfo.class
8.5 运行小程序
使用
appletviewer
运行小程序:
appletviewer UserInfo.html
8.6 调试程序
如果在开发过程中发现问题,可以使用
jdb
进行调试。首先使用
-g
选项编译程序:
javac -g UserInfo.java
然后运行
jdb
:
jdb UserInfo
设置断点并进行调试:
stop in UserInfo.init
run
通过以上步骤,我们完成了一个简单Java小程序的开发、文档生成、打包、运行和调试的全过程,充分展示了这些工具的实际应用。
9. 总结与展望
通过对
appletviewer
、
javadoc
、
jar
和
jdb
这些Java开发工具的详细介绍和实际应用案例,我们可以看到它们在Java开发的不同阶段都发挥着重要作用。
appletviewer
方便我们测试和查看小程序的运行效果,
javadoc
帮助我们生成规范的程序文档,
jar
工具简化了程序的部署过程,
jdb
则是调试程序的有力武器。
随着Java技术的不断发展,这些工具也可能会不断更新和完善,提供更多的功能和更好的用户体验。同时,开发者也应该不断学习和掌握这些工具的使用技巧,以提高开发效率和程序质量。希望本文能为你在Java开发中使用这些工具提供有益的参考和帮助。
超级会员免费看

被折叠的 条评论
为什么被折叠?



