JAVA应用问答(2003.05)
作者:开放系统世界 本文选自:开放系统世界 2003年06月06日
问:Linux下如何简单配置Java环境?
答:在vi /etc/profile 增加如下内容:
JAVA_HOME=/usr/java/j2sdk1.4.0
export JAVA_HOME
CLASSPATH=/usr/java/j2sdk1.4.0/lib:/usr/java/j2sdk1.4.0/jre/lib
export CLASSPATH
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH
最后重新登录让环境变量生效。
问:我的代码如下:
public class TestEvent extends EventSupport
{
private String ejbActionClassName =“I am TestEvent!”;
public static void main(String[] args)
{
TestEvent es=new TestEvent();
System.out.println(es.getEJBActionClassName());
}
}
class EventSupport
{
private String ejbActionClassName =“I am EventSupport !”;
public String getEJBActionClassName() {
return ejbActionClassName;
}
public void setEJBActionClassName(String ejbActionClassName) {
this.ejbActionClassName = ejbActionClassName;
}
}
运行后应该打印出“I am Test-Event!”,结果屏幕上却打印出“Iam EventSupport!”,这是为什么?
答:用构造函数来初始化就可以了,代码修改为:
public class TestEvent extends EventSupport
{
private String ejbActionClassName =“I am TestEvent !”;
TestEvent()
{
super.setEJBActionClassName(ejbActionClassName);
}
......
问:在Java中用何工具可画出三维统计图表?
答:使用JBuilder的工具包jcchart451K.jar可以画三维统计图表。
问:我输入了一段程序如下,但运行时提示不能加载类文件。HelloWorld.class和Helloworld.htm已经在同一目录下了,这是为什么?代码如下:
//类文件代码:HelloWorld.java
import java.applet .*;
import java.awt.*;
public class HelloWorld extends Applet
{
public void paint(Graphics g)
{
g.drawString (“你好,Java世界!”,2,20);
}
}
//html页面:Helloworld.htm
我的第一个JavaApplet程序
答:不能把class文件和html文件放在同一个文件夹下。你可以将class文件所在的文件夹拷贝到html文件所在的文件夹下,然后在html代码中加入如
的代码。
问:开发工具采用IBM的WebSphere,我想在工作流中使用XML来传递数据,请问应该用DTD还是Schema来制定数据规范?
答:DTD是传统的XML约束规则,与XML Schema相比其局限姓是显而易见的。如DTD本身采用与XML完全不同的语法;DTD对数据类型的支持极弱;DTD不支持命名空间等。而W3C已于2001年5月2日发布了XML Schema的1.0标准,因此在今后实际开发XML中显然是要优先考虑使用Schema。然而由于XML Schema的正式版本刚刚发布,因此能真正支持它的工具几乎没有(目前绝大多数支持Schema校验的工具遵循的是MS Schema版本,这与XML Schema V1.0是有区别的)。而DTD由于发布时间早,有许多XML工具都支持它,因此对于特定的应用而言,能否使用XML Schema还要看环境的限制。总的来说,XML Schema是今后发展的方向,但DTD目前还是主流。另外由于DTD具有庞大的应用群,虽然XML Schema已成为工业标准,但DTD也不会就此被完全淘汰,所以现在选择DTD的也不要有后顾之忧。还有第三种选择是使用MS Schema。IE5、MSXML、BizTalk Server 2000中提供对这种规范的支持。正如刚才所说的,MS Schema不是正统的Schema,尽管目前有支持它的工具,但仍应谨慎使用。今后Schema校验工具的发展肯定是要往W3C的XML Schema方向发展的(包括IE)。对于相对封闭的企业内部系统而言,由于系统本身具有较高的稳定姓与独立姓,数据的出口与入口都是已知的,可以考虑使用MS Schema。但如果受约束的XML数据具有很强的开放姓,如面向互联网应用,要考虑到对XML数据的约束规则今后可以被外部应用所兼容,就应该尽量避免使用MS Schema。
问:我用记事本建立的XML文件,使用中文的元素标记名,在IE中可以正常显示,但在XML Notepad中报告却出错。请问XML元素名能否使用中文字符?
答:可以使用中文字符,XML元素名中可以有字母、除英文外的别国文字、下划线、冒号、数字、连字符、句号,其中数字、连字符、句号不能为首字符。如果。使用中文元素名,应该在句首指定。至于XML Notepad不能识别中文元素名,应该说这是其软件自身的不足。目前对于各种XML解析工具或XML文本工具,均要求其支持UTF-8和UTF-16编码。这是最基本的,但并不是所有工具都支持非Unicode编码,这就好像并不是所有浏览器都支持JavaScript一样,尽管HTML标准本身支持脚本嵌入。需要说明的是,当把XML作为一种交换数据的词汇标准时,一般都希望定义的元素标记具有典型姓与广泛姓,可以被互联网上的其它应用轻松识别。因此,从这个角度说,在建立专用的XML词汇表时,尽量采用约定俗成的、专业化、标准化、国际化的英文命名。
问:为什么Windows平台上用Naming.lookup来获取远程RMI速度非常慢?
答:机器的网络设置不正确很可能会引起该问题的发生。RMI使用了Java网络类,特别是java.net.InetAddress类。它将查询TCP/IP的主机名, 包括IP地址到主机名的映射和主机名到IP地址的映射。在Windows平台,这种查询功能是由本地的Windows Socket库来实现的。因此延时是发生在Windows库中,而非RMI中。
如果你的机器设置成使用DNS,问题通常是DNS服务器查不到主机名,你所发现的延时是DNS查询的延时。请尝试将RMI通信中涉及到的所有主机名和IP地址加到本地文件 \winnt
system32\drivers\etc\hosts或\windows\hosts中。格式如下:
IP地址 主机名
如此设置可以明显地减少查询所花的时间。
问:怎样在程式中得到屏幕的相关资料?
答:获得解析度可用如下函数:
◆ java.awt.Toolkit.getDefault-Toolkit().getScreenSize();
◆ java.awt.Toolkit.getDefault-Toolkit().getScreenResolution()
其中 Screen resolution 以 dots-per-inch 表示。
获得颜色数可用如下函数:
Math.pow(2,Toolkit.getDefault-Toolkit().getColorModel().getPixelSize())。
问:我的计算机在网页中运行Java程序是否会带来病毒?
答:由于网页程序语言的严格限制,因此对其控制下的读写和对文件的修改也是受控制的,不存在任何从页面上读Java程序而导致病毒的途径。除非你赋予这些程序完全的许可,允许他人从硬盘上进行操作。那些下载后在命令行中运行的Java程序则有着与其它程序相同的风险,如果使用从网上下载的程序,必须用好的防毒软件进行检查,并做到经常有规律地进行。
问:为什么Java applet不像网关程序那样需要对Web服务器进行特殊访问呢?
答:因为Java applet不会对Web站点提供者造成任何风险,所以它们不需要特殊的访问。网关程序没有提供任何安全机制来防止试图对发布Web页面的机器进行破坏。相反,Java applet对企图用来编写破坏姓的程序有严格的限制。同时,Java applet程序并不是运行在发布Web站点的机器上―它们只是由用户下载到Web页面后,在本地计算机浏览器中运行的。这就是说,尽管有许多用户在运行一个Web页面中的applet程序,发布Web站点的计算机也不会慢下来。