`
JAVA海洋
  • 浏览: 600430 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

JBuilder开发技巧

阅读更多
同步输出目录

在Java开发过程中,有时候我们要创建一些简单的类来测试某些功能,测试完成后就从磁盘删除该类的源文件,因为我们不想让该类出现在最终的产品中。但是,虽然源文件已经被删除,编译好的class文件仍可能留在磁盘上,当有其他的类依赖于该类,就可能导致开发环境的不稳定。

在JBuilder中,我们可以设置一个编译选项来同步(Synchronize)Java的源文件和对应的类,这样,一旦Java源文件被删除,对应的class文件也将被删除。按照如下步骤设置该同步选项:

打开 Project | Project Properties...

选择 Compiler 选项卡,看到如下对话框:



注意Synchronize output dir选项。选中该选项就可以实现输出目录同步,每次编译时JBuilder将保证Java源文件与Java class文件的同步。

输出调试信息

很多时候,我们要向标准输出设备输出一些简单的变量值,以便了解程序的运行情况。例如,在程序中加入类似下面的代码:

<ccid_nobr></ccid_nobr>
<ccid_code><font size="4"><font color="#a52a2a">System.out.println("调试信息: 变量的值是" + value);</font></font></ccid_code>


当编写和调试代码的工作结束,接下去就要进行最后的编译和打包,这时就要删除所有上面这些System.out.println代码。为了避免这些麻烦,我们可以引入一个逻辑变量debugMode,把它设置为true,并在输出调试信息之前检查这个变量的值:

<ccid_nobr></ccid_nobr>
<ccid_code><font size="4"><font color="#a52a2a">if (debugMode)
    System.out.println("调试信息: 变量的值是" + value);</font></font></ccid_code>


所有调试工作结束之后,再把debugMode变量设置成false,这样程序运行时就不会再输出调试信息。

但是,这还不是处理类似调试信息的最佳办法,我们可以用Diagnostic类来改进。Diagnostic类有三个与输出流有关的方法,除了标准的System.err输出流,还可以赋予其他不同的输出流(例如文件或URL)。最重要的是,当编写和调试代码的工作结束之后,我们可以在正式编译时排除Diagnostic类,从而也就排除了对Diagnostic类方法的所有调用。

下面是Diagnostic类中可用于输出信息的三个方法:

<ccid_nobr></ccid_nobr>
<ccid_code><font size="4"><font color="#a52a2a">print(String message):输出信息 
println(String message):输出信息,并追加行结束符。 
printlnc(String message):输出带有行结束符、计数器(它的值不断递进)和Tab字符的信息。</font></font></ccid_code>


因此,我们可以把上面的System.out.println替换为:

<ccid_nobr></ccid_nobr>
<ccid_code><font size="4"><font color="#a52a2a">Diagnostic.printlnc("调试信息:变量的值是:" + value);</font></font></ccid_code>


这些输出方法的标准输出设备是System.err,但我们可以用setLogStream(PrintStream log)方法改变它。例如,假设要把输出发送到log.txt文件,只需插入如下代码:

<ccid_nobr></ccid_nobr>
<ccid_code><font size="4"><font color="#a52a2a">Diagnostic.setLogStream(new java.io.PrintStream(new
      java.io.FileOutputStream("log.txt")));</font></font></ccid_code>


最后,在开发期间,我们只需调用一个方法就可以关闭所有的输出:

<ccid_nobr></ccid_nobr>
<ccid_code><font size="4"><font color="#a52a2a">Diagnostic.enable(false);</font></font></ccid_code>


资源捆绑



在Java中,要把直接嵌入到程序的字符串作为资源使用是很容易的。例如,只要把字符串保存到一个独立的文件,我们就可以很方便地通过创建不同的文件实现对多种语言的支持。

为了把“硬编码”的字符串保存到资源捆绑文件,标准Java API提供两种办法:

· 把键-值对以属性文件的形式保存到文本文件。

· 把键-值对保存到Java源文件中的String[][]数组对象,该Java源文件从java.util.ListResourceBundle扩展。

第一种方法具有较好的灵活性,可以在不重新编译的前提下修改字符串值。第二种方法具有较好的性能,但每次修改字符串值,包含键-值对的Java源代码文件都必须重新编译。JBuilder提供了保存硬编码字符串值的第三种方法,即com.borland.jb.util.ArrayResourceBundle。

ArrayResourceBundle类通过一个String[]数组对象保存键的值,但不包含键,我们可以通过索引访问值,即第一个值的索引为0,第二个值的索引为1,等等。由于可以直接访问值,因此性能相当好。但也有缺点——维护保存值的文件很困难,因为值和键之间没有直接的(直观的)联系。

异常跟踪



在Java中,利用try..catch(..finally)语句可以捕获和处理异常,非常方便。catch块的常见异常处理方式是输出异常,例如把异常输出到日志文件。

Exception类有一个printStackTrace()方法,它能够从发生异常的方法中输出堆栈信息,默认输出位置是System.err。但是,有时候我们要把堆栈信息输出到System.err之外的其他地方,例如在出现异常时把堆栈信息输出到email,或者用一个对话框显示出来。

printStackTrace()方法有几种不同的类型:

· printStackTrace(),输出到标准错误流。

· printStackTrace(PrintStream ps),输出到名为ps的PrintStream。

· printStackTrace(PrintWriter pw),输出到名为pw的PrintWriter。

我们可以用最后一种printStackTrace()方法把堆栈信息保存到String对象。只要在String对象中捕获了堆栈信息,我们就可以方便地在应用的任何地方使用这些信息了。下面的代码片断示范了具体的实现步骤:

<ccid_nobr></ccid_nobr>

<ccid_code><font size="4"><font color="#a52a2a">private String getStackTraceAsString() {
    // StringWriter将包含堆栈信息
    StringWriter stringWriter = new StringWriter();
    //必须将StringWriter封装成PrintWriter对象,
    //以满足printStackTrace的要求
    PrintWriter printWriter = new PrintWriter(stringWriter);
    //获取堆栈信息
    e.printStackTrace(printWriter);
    //转换成String,并返回该String
    StringBuffer error = stringWriter.getBuffer();
    return error.toString();
}</font></font></ccid_code>


快速查看JavaBean基本信息



在JBuilder中,要查看JavaBean的内部信息是非常方便的。我们可以把JavaBean拖入设计窗口中,通过Object Inspector查看JavaBean的属性和事件。但是,即使不通过设计器,我们也可以查看JavaBean的信息,这就是使用BeanInsight(菜单:Tools | BeanInsight)。



点击Examine Bean按钮就开始分析指定的JavaBean,在BeanInsight Result区域可以看到分析JavaBean的结果。如果要了解更详细的信息,点击“View Details...”按钮。

多个行的属性值



属性文件是保存应用配置信息的好方法。有了属性文件,修改应用参数时只需修改简单的属性文本文件,无需重新编译整个应用。

属性文件以“键-值”对的形式保存数据。每一个行以键开头,加上一个等于符号,再加上与该键对应的值。键与值必须在同一个行上,这一点很重要。但是,有些时候,值的内容非常多,如果值能够分成多行存放,将带来很大的方便。下面我们就来看看如何使用多行的属性值。

首先,下面这个代码片断读取test.properties属性文件:

<ccid_nobr></ccid_nobr>

<ccid_code><font size="4"><font color="#a52a2a">try {
    Properties p = new Properties();
    File file = new File("test.properties");
    FileInputStream fis = new FileInputStream(file);
    p.load(fis);
  } catch (IOException ioex) {
    ioex.printStackTrace();
  }</font></font></ccid_code>


Properties类的load()方法需要一个输入流作为参数,这里我们向它传入了一个FileInputStream对象。

接下来,我们就可以通过调用getProperty()方法从Properties对象获取属性值。下面我们来看看test.properties属性文件的内容:

<ccid_nobr></ccid_nobr>
<ccid_code><font size="4"><font color="#a52a2a">singleline=Single line value
  multiline =This example shows how we
             can write a property
             value over multiple lines in a
             properties file</font></font></ccid_code>


这个属性文件保存了两个属性,键分别是singleline和multiline。singleline的值只有一行,而multiline的值有多行。

如果我们调用Properties对象的getProperty()方法,并输出属性值,结果将是:

调用:

<ccid_nobr></ccid_nobr>
<ccid_code><font size="4"><font color="#a52a2a">System.out.println("singleline? " + p.getProperty("singleline"));
  System.out.println("multiline ? " + p.getProperty("multiline"));</font></font></ccid_code>


结果:

<ccid_nobr></ccid_nobr>
<ccid_code><font size="4"><font color="#a52a2a">singleline? Single line value
  multiline ? This example shows how we</font></font></ccid_code>


multiline属性只包含了第一行值。那么,如何解决这个问题呢?其实很简单,只需要在每个行的末尾加上转义字符“\”就可以了。修改后的属性文件如下所示:

<ccid_nobr></ccid_nobr>
<ccid_code><font size="4"><font color="#a52a2a">singleline=Single line value
  multiline =This example shows how we \
             can write a property \
             value over multiple lines in a \
             properties file</font></font></ccid_code>


再次读取属性文件的值,multiline的属性值就能够完整地读取出来
分享到:
评论

相关推荐

    JBuilder 7编程实作指南(PDG)

    本书从实用的角度出发,用9个综合实例详细讲解了利用JBuilder 7进行编程开发的方法和技巧。全书由12章组成,主要内容包括:JBuilder 7概述、Java编程基础、Java编程语法、开发Java应用程序的基本流程、图形用户界面...

    实战 J2EE 开发购物网站 二

    小技巧一:大家觉得jBuilder运行时也许很慢,因为jbuilder默认使用32MB内存,如果你的内存够大的话,可以加大一点,具体办法如下,在jBuilder安装目录BIN下找到jbuilder.config文件,编辑它,改变Vmparams 后的参数...

    JDBC 3.0数据库开发与设计

    2.5 JDBC开发调试技巧 2.6 本章小结 第3章 JDBC3.0 API数据库开发基本操作 3.1 数据库用例说明 3.2 与数据库建立连接 3.2.1 JDBC URL 3.2.2 连接事件(Connection Event) 3.2.3 连接事件监听器(Connection...

    软件工程师Java班课程

    J2EE主流开发工具JBuilder、应用服务器WebLogic 掌握J2EE平台的Java高级编程 Jav和XML XML, Web Service,异构系统整合、分布式应用 掌握新的java系统和传统软件系统的 JAVA软件工程师岗前集训 项目沟通和人事...

    基于Java的标准型计算器设计【开题报告】.doc

    二、课题研究的主要内容和预期目标 主要内容 本课题研究的是一个基于Java的计算器,通过本课题熟悉Java语法及Jbuilder开发工 具;实现算术操作、平方根、百分比等基本运算功能;实现记忆功能,恢复以前保存的 运算...

    在线考试系统文献综述

    《精通 Jbuilder 9》.电子工业出版社,2003.8. [2] 周影 .《网络编程语言JSP实例教程》.电子工业出版社,2003.6. [3] 陈海山.《深入Java Servlet 网络编程》.清华大学出版社,2002.2. [4] 清宏计算机工作室 .《JSP编程...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包2

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包3

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包4

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。...

    疯狂JAVA讲义

    学生提问:老师,我想学习Java编程,到底是学习Eclipse好呢,还是学习JBuilder好呢? 21 1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种...

Global site tag (gtag.js) - Google Analytics