36、Java开发工具详解:从运行到调试

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开发中使用这些工具提供有益的参考和帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值