王朝网络
分享
 
 
 

JBuilder开发技巧

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

技巧之一:同步输出目录

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

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

打开 PRoject Project Properties...

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

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

输出调试信息

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

System.out.println("调试信息: 变量的值是" + value);

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

if (debugMode)

System.out.println("调试信息: 变量的值是" + value);

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

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

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

print(String message):输出信息

println(String message):输出信息,并追加行结束符。

printlnc(String message):输出带有行结束符、计数器(它的值不断递进)和Tab字符的信息。

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

Diagnostic.printlnc("调试信息:变量的值是:" + value);

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

Diagnostic.setLogStream(new java.io.PrintStream(new

java.io.FileOutputStream("log.txt")));

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

Diagnostic.enable(false);

资源捆绑

在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对象中捕捉了堆栈信息,我们就可以方便地在应用的任何地方使用这些信息了。下面的代码片断示范了具体的实现步骤:

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();

}

快速查看JavaBean基本信息

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

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

多个行的属性值

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

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

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

try {

Properties p = new Properties();

File file = new File("test.properties");

FileInputStream fis = new FileInputStream(file);

p.load(fis);

} catch (IOException ioex) {

ioex.printStackTrace();

}

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

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

singleline=Single line value

multiline =This example shows how we

can write a property

value over multiple lines in a

properties file

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

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

调用:

System.out.println("singleline? " + p.getProperty("singleline"));

System.out.println("multiline ? " + p.getProperty("multiline"));

结果:

singleline? Single line value

multiline ? This example shows how we

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

singleline=Single line value

multiline =This example shows how wecan write a propertyvalue over multiple lines in aproperties file

再次读取属性文件的值,multiline的属性值就能够完整地读取出来。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有