1.程序结构
Java语言的源程序代码由一个或多个编译单元(compilation unit)组
成,每个编译单元只能包含下列内容(空格和注释除外):
* 一个程序包语句(package statement )
* 引入语句(import statements)
* 类的声明(class declarations)
* 界面声明(interface declarations)
每个Java的编译单元可包含多个类或界面,但是每个编译单元却至
多有一个类或者界面是公共的。
Java 的源程序代码被编译之后,便产生了Java字节代码(bytecode)。
Java的字节代码由一些不依赖于机器的指令组成,这些指令能被Java的
运行系统(runtime system)有效地解释。Java的运行系统工作起来如同一
台虚拟机。
在当前的Java实现中,每个编译单元就是一个以.java为后缀的文件。
每个编译单元有若干个类,编译后,每个类生成一个.class文件。.class
文件是Java虚机器码?
2. 词法问题
在编译的过程中,Java源程序代码中的字符被划分为一系列的标记
(token)。Java编译器可以识别五种标记: 标识符、关键字、字面量、运
算符以及特殊分隔符。注释以及诸如空格、制表符、换行符等字符 ,都
不属于标识之列,但他们却常被用来分隔标记。
Java程序的编写采用泛代码Unicode字符集,若采用其它的字符集,
则需在编译前转换成Unicode。
2.1 注释
Java语言提供了3种形式的注释:
//text 从//到本行结束的所有字符均作为注释而被编译器忽略。
/* text */ 从/*到*/ 间的所有字符会被编译器忽略。
/** text */
当这类注释出现在任何声明之前时将会作特殊处理,它们不能再用
在代码的任何地方。这类注释意味着被括起来的正文部分,应该作为声
明项目的描述,而被包含在自动产生的文档中。
2.2 标识符
标识符的首字符必须是一个字母,下划线("_")或美元符号("$")。 后
面的字符也可是数字0-9。 Java使用泛代码字符集,为了便于识别好一
合法标识符,下面列出它的“字母”:
* 大写字母“A”~“Z”
* 小写字母“a”~“z”
* 泛代码(Unicode)中所有字符编码在十六进制数00C0之前的字
符。标识符中,首字母后的字符可以是任意的。当然,Unicode区段中
那些被保留作特殊字符的除外。
由此,“garton”及“MjΦlner”都是合法标识符,但是,包括
诸如“π”的字符串却不是合法的。
为了取得更多的有关泛代码标准的信息,请参阅“The Unicode
Standard”,“World Wide Character Encoding version 1.0,volumes 1 &
2”,Unicode公司的FTP地址是unicode.org。
2.3 关键字
下面的标识符被保留用作关键字,他们不能作任何其它的用途。
abstract default goto* null synchronized
boolean do if package this
break double implements private threadsafe
byte else import protected throw
byvalve * extends instanceof public transient
case false int return true
catch final interface short try
char finally long static void
class float native super while
const * for new switch
continue
其中,加*标记后是被保留但当前却未使用的。
2.4 字面量
字面量(literal)是某些类型值的基本表述,这些类型包括整型,浮点
型,布尔量,字符及字符串。
2.4.1 整型字面量
整数可有三种表示形式: 十进制,八进制和十六进制。一个十进制
整型字面量由一系列的数字组成,但它的第一个数字不能是0(有时十进
制数字也可象下面讲的那样加后缀)。整数也可表达成八进制或十六进制
形式。以0开头的整型字面量,意味着它是一个十六进制的。十六进制
整数可以包括数字0-9以及字母a-f及A-F。八进制整数中则只能是出现
数字0-7。在超过32位所能表示的范围之前,整型字面量的类型即为int,
否则为long型。一个整型字面量可通过加后缀L或l而强迫成long型。
下面的均为合法的整型字面量。
2 2L 0777
2.4.2 浮点字面量
一个浮点字面量可包括以下部分: 一个十进制整数,一个小数点“.”,
小数部分(另外一个十进制整数),指数部分,一个类型后缀。指数部分
是一个e或E后跟一个整数。浮点字面量至少包含有一个数字,外加或
者一个小数点或者一个e(或E),下面举一些浮点字面量的例子:
3.1415 3.1E12 .1e12 2E12
就象在后面描述的那样,Java语言有两种浮点类型: float 及
double,用户可按以下写法区分:
2.0d或2.0D double 型
2.0f或2.0F或2.0 float型
2.4.3 布尔字面量
布尔(boolean)字面量有两个值: true及false。
2.4.4 字符字面量
字符字面量是一个由单引号括起的字符(或者是由一组字符来表述
一个字符)。字符属于char类型,并且均从泛代码字符集中得来。而下面
列出的转义序列则用来描述一些非图形字符,它们以反斜杠“\”开始以
作转义用。
续行符头 \
换行 NL(LF) \n
垂直制表符 HT \t
退格 BS \b
回车 CR \r
走纸换页 FF \f
反斜杠 \ \\
单引号 ' \'
双引号 " \"
八进制数 0ddd \ddd
十六进制数 0xdd \xdd
泛代码字符 0xdddd \udddd
2.4.5 串字面量
串字面量是双引号引起的零个或多个字符的序列。每个串字面量被
看作是一个串对象,而并非是一个字符的数组,例如“abc”创建了一
个新的串类的实例。下面的都是合法的串字面量:
" " \\空串
"\" " \\只包含一个双引号的串
"This is a string"
"This is a \
two-line string"
2.5 运算符及特殊分隔符
下面这些字符在Java源程序中作运算符或分隔符用:
+ — ! % ^ & * | ~ / > <
( ) { } [ ] ; ? : ,· =
另外,下面这些复合字符被用作运算符:
++ -- == <= >= != << >>
>>> += -= *= /= &= /=
^= %= <<= >>= >>>= ‖ &&
后面还要在运算符一节中作详细介绍。
3. 类型
任何一个变量或表达式都有一个类型,类型决定变量可能的取值范
围,决定对这些值允许的操作,以及这些操作的意义是什么。Java语言
中提供了内置定义类型,程序员也可以利用类及界面(interface)机制构造
新类型。
Java语言有两种类型: 简单类型和复合类型。简单类型指那些不能
再分割的原子类型。如:整型、浮点型、布尔型、字符型均为简单类型。
复合类型建立在简单类型的基础上。Java语言有三种复合类型:数组、
类及界面。在本节中,我们主要讨论简单类型及数组。
3.1 数值类型
3.1.1 整数类型
整数与C及C++中相似,但有两点区别: 其一,所有的整数类型
均是独立于机器的;其二,对某些传统的定义作出改变,以反映自C问
世以来所带来的变化,四种整数类型分别具有8位、16位、32位及64
位的宽度,并且均是有符号的(signed)。如下所示:
宽度
类型名
8
byte
16
short
32
int
64
long
一个变量的类型不会直接影响它的存储的分配,类型仅仅决定变量
的算术性质以及合法的取值范围。如果把一个超出合法范围的值赋给一
变量,那么这个值将是对合法值域取模后的值。
3.1.2 浮点类型
关键字float表示单精度(32位),而double则表示双精度(64位),两
个float型数运算的结果仍是float型,若有其中之一为double型,则结
果为double型。浮点运算及数据格式按IEEE754中的定义,细节问题请
参阅 “附录A: 浮点”中有关浮点实现的细节。
3.1.3 字符类型
Java全部使用泛代码字符集,因此char类型数据被定义成一个16
位的无符号整数。
3.2 布尔类型
当一个变量的取值或为ture或为false,或者是当一个方法的返回值为ture或false时,它?
嵌际遣级嘈偷摹A硗猓叵翟怂愕慕峁嗍遣?
尔型的。
布尔值不是数值型,因此不能用强制类型转换把它们转化成数值。
3.3 数组
数组在Java语言中属第一类对象。由它们代替了指针运算,所有的
对象(包括数组)都可通过标识来引用。即使被当作数运算,标识的值也
不应被破坏。通过new运算符可创建一个数组。
char s[]=new char[30];
数组第一元素的下标为0,在声明中指定维数是不允许的。每次都
必须显式地用new分配数组:
int i [] =new int [3];
Java语言不支持多维数组,但是,程序员却可以创建数组的数组。
int i [ ] [ ]=new int [3][4];
至少有一维要明确给定,而其它维则可在以后再确定。例如:
int i[] []=new int [3] [ ]
是一个合法的声明。
除了在变量名及方法名后跟方括号这种C风格的声明之外,Java语
言允许方括号跟在数组类型之后,下面两行是等价的:
int iarray[ ];
int [ ] iarray;
同样地,方法声明也一样:
byte f(int n)[ ];
byte [ ] f(int n);
运行时检查下标保证它们是合法的:
int a[ ]=new int [10];
a[5]=1;
a[1]=a[0]+a[2];
a[-1]=4; // 运行时引发一个ArrayIndexOutOfBoundsException(数组下
标越界)异常
a[10]=2; //运行时引发一个ArrayIndexOutOfBoundsException(数组下
标越界)异常
数组的大小必须使用整数表达式:
int n;
float arr[ ]=new float[n+1]
数组的长度可通过.length 查找:
int a[] []=new int [10][3];
println (a.length) //打印出10
println (a[0].length) //打印出3。
3.3.1 数组细节
我们所定义的数组都是Object类的一个子类的实例,在类的层次结
构中有一个被称为Array的子类,它有一个实例变量“length”。对每
一个基本类型,都有一个相应的Array的子类。同理,每一个类也都有
一个相应的Array子类存在。例如: new Thread[n] 创建一个Thread[ ]
的实例。如果类A是类B的超类,那么,A[]是B[]的超类,见下图:
Object
Array A
int[] float[] A[] B
B[]
因此,可以把数组赋给一个Object变量。
Object o;
int a[]=new int [10];
o=a;
并且可通过强制类型转换把object变量赋给一数组变量。
a=(int [])o;
Array类本身不能显式地产生子类。
4. 类
类(class)是传统面向对象编程模型的象征。它们支持数据抽象以及实
现对数据的约束,在Java中,每一个新的类创建一个新类型。
要想得到一个新的类,程序员必须首先找到一个已有的类,新类即
在这个已有类的基础上构造,我们称之为派生(derived)。派生出的类亦称
为原来类的子类,而这个类我们称为超类(super class)。
类的派生具有传递性: 如果B是A的子类,C是B的子类,则C
是A的子类。
一个类的直接超类以及指示这个类如何实现的界面(interface),在类
的声明中,由关键字extends及implements标出。如下示(黑体表示关键字)::
[doc_ comment] [modifer] class ClassName
extends Superclassname
implements interface {,interface } ] {
class body
}
举例:
/** 2 dimension point */
public class Points {
float x,y;
......
}
/** printable point */
class PinttablePoint extends Points implements Printable {
......
public void Print ( ) {
}
}
所有的类均从一个根类 Object中派生出来。除Object之外的任何类
都有一个直接超类。如果一个类在声明时未指明其直接超类,那么缺省
即为Object。如下述:
class Point {
float x,y
}
与下面写法等价
class Point extends Object {
float x, y;
}
Java语言仅支持单继承,通过一个被称作“界面”的机制,来支持
某些在其它语言中用多继承实现的机制(详见“界面”一节)。Java之所
以没有采用C++的多继承机制,是为了避免多继承带来的诸多不便,例
如:可能产生的二义性,编译器更加复杂,程序难以优化等问题。
4.1 类类型之间的强制转换
Java语言支持在两个类型之间的强制转换,因为每个类即是一个新
的类型。Java支持类类型之间的强制转换,如果B是A的子类,那么B
的一个实例亦可作为A的实例来使用,虽然不需要显式的转换,但显式
转换亦是合法的,这被称作拓宽(widening)。如果A的一个实例,想当作
B的实例使用,程序员就应写一个类型转换叫作削窄(narrowing)的强
制。从一个类到其子类的强制转
换在运行时要作例行的检查以确保这个对象就是其子类的一个实例
(或其子类之一)。兄弟类之间的强制类型转换是一个编译错误,类的强制转换的语法如下?
?
(classname) ref
其中,(classname)是要转换的目的类,而ref是被转换的对象。
强制转换仅仅影响到对象的引用,而不会影响对象本身。然而,对实例
变量的访问却受到对象
引用的类型的影响。一个对象从一个类型到另一类型的强制转换后,
可以使同一变量名对不同的实例变量访问。
class ClassA{
String name = "ClassA"
}
class ClassB extends ClassA { //ClassB是ClassA的子类
String name="ClassB";
}
class AccessTest {
void test( ) {
ClassB b=new ClassB( );
println (b.name); //打印: ClassB
ClassA a
a=(ClassA)b;
println (a.name); //打印: ClassA
}
}
4.2 方法
方法(method)是可施于对象或类上的操作,它们既可在类中,也可在
界面中声明。但是他们却只能在类中实现(Java中所有用户定义的操作均
用方法来实现)。
类中的方法声明按以下方式:
[Doc_ comment] [Access Specifiers] ReturnType methodName(parameterList)
{
method body(本地的native及抽象的方法没有体部分)
}
除构造函数可以无返回类型外,其余的方法都有一个返回类型。如
果一个不是构造函数的方法不返回任何值,那么它必须有一个void的返
回类型。
参数表由逗号分隔的成对的类型及参数名组成,如果方法无参数,
则参数表为空。方法内部定义的变量(局部变量)不能隐藏同一方法的其
它变量或参数。例如: 如果一个方法带以名为i的参数实现,且方法内
又定义一个名为i的局部变量,则会产生编译错误,例如:
class Rectangle {
void vertex (int i,int j) {
for (int i=0; i<=100; i++) { //出错
…
}
}
}
方法体内循环语句中声明的i是一个编译错误。
Java语言允许多态方法命名,即用一个名字声明方法,这个名字已
在这个类或其超类中使用过,从而实现方法的覆盖(overriding)及重载
(overloadding)。所谓覆盖是对继承来的方法提供另一种不同的实现。而
重载是指声明一个方法,它与另外一个方法有相同的名字,但参数表不同。
注: 返回类型不能用来区别方法,即在一个类的范围内,具有相同
的名字,相同的参数表(包括个数、位置及类型)的方法,必须返回相同
的类型。若这样的两个方法有不同的返回类型,将会产生一个编译错误。
4.2.1 实例变量
实例变量(instance variables)是指那些在类内声明,但在方法的作用
域之外尚未被static标记的变( 参照 “静态方法,变量及初始化”段)。
而在一个方法的作用域之内声明的变量是局部变量。实例变量可以有修
饰符(见修饰符)。
实例变量可以是任何的类型,并且可以有初始值。如果一个实例变
量无初始值,它将被初始化成0。布尔型变量被初始化成flase,对象被
初始化成null。下面是一个实例变量j具有初始化值的例子:
class A{
int j =23;
……
}
4.2.2 this 和super变量
在一个非静态方法的作用域内,this这个名字代表了当前对象。例
如: 一个对象可能需要把自己作为参数传给另一个对象的方法:
class MyClass {
void Method (OtherClass obj) {
…
obj.Method (this)
…
}
}
不论何时,一个方法引用它自己的实例变量及方法时,在每个引用
的前面都隐含着“this”。
如:
class Foo {
int a,b,c;
......
void myPrint ( ) {
print (a+ "\n"); // a=="this.a"
}
......
}
super变量类似于this变量。this变量实际上是对当前对象的引用,
它的类型就是包含当前正在处理的方法的类。而super变量则是对其超类
类型对象的引用。
第一问
: JAVA 可以将 HOMEPAGE 上的一张图在 CLIENT 端上予以标定
: 某一区域(侦测滑鼠所标定的座标区间),然後交由 SERVER 端来
: 予以处理呢??
: 一个想做以上工作还在犹豫 JAVA 的生手
Hi there,
I think you can use Event to get the coordinates, something like:
public boolean handleEvent( Event evt){
if (evt.id==Event.MOUSE_DOWN){
returnToServer(evt.x, evt.y); //X and Y are coordinates
return true;
}
}
第二问
: 1.请问诸位java高手,如何将label的字体颜色改变;
没办法,Solaris上可以, 但Windows 95中没效
: 2.另一个问题是GridLayout能不能将某些表格栏设为较大的单位,如:
用GridBagLayout
第三问
: 怎麽在java产生一个乱数呢?且限定其范围, 谢谢告知
1.产生变数: var1 = (int) (Math.random() * var2 );
ps. Maht.random() 产生 0 ~ 1 的乱数
2.设定范围完全看变数 var2 的值而定
第四问
> 我在找有关这方面的书 中英皆可
去 http://www.javasoft.com 找找吧! sun 有放出一份 java vm spec.
里头把 java vm 的规格都讲的很详细... 连 byte code 都有... 我想
看这一份文件就足够了吧!
第五问
>请问各位高手 在java-applet中
> 怎样写 才能设定show在page上 那个区块的背景颜色呢
setBackground()这个method应该可以达到你的要求?
第六问
: Math.random()这个method会产生0~1之间的float number, 当我想要产生一组
: 从零到七之间的数字时 我利用这个method产生的值在乘以7, 我认为这样应该
: 就可以了 可是结果显示'7'这个数字都不会出现 不知道是什麽原因 有谁能够
: 为我解释吗 感激不尽
可能是这样:
因为 random() return 一个 double,当你乘上 7 再转为 int
後, 因为精确度的关系,所以不会出现 7. 如:6.999999999999(double)-->6(int)
第七问
> 目前想做个 Talk Program. 但是卡在於怎麽将某一个 client 端送来的讯号,
> 在 Server 收到之後 广拨给所有的 client ....
>
> 一个 server 的 thread 与 client 端连接之後, A 送出去的字串只能马上送给 A,
> 没建立共享区块, 该 client 送出的字串只能由该 client 端接收. 这当然不对.
>
> 假如建立一个共享区块, client A 送出的字串也只能马上送给 A,
> 得在 client B 送出讯号之後, 才会把共享的区块资料在回给 B,
> 但是这样没有做到同步更新...
>
> 应该怎麽解决?
你用的 client 可能只有一个 thread. 解决之道是 client 用两个 thread,
一个负责 receive, 另一个负责 send.
第八问
> : Java 用的 *.au 档好像有不同的格式 (attribe, 组态)...请问该用
> : 那一种的.....(小弟使用 goldwave 来编辑, 且参照 goldwave 的改
> : 法来建立 *.au, 但仍不为 Java 所接受 )
> 有些忘了... 随便说说...
> 使用 goldwave 来做 *.au 档, 要先把你的声音采样频率设定成 8KHz,
> 然後档案格式选 Sun/Next (*.au) 应该就可以了. :)
^^^^^^^^^^^^^^
要选mono那一项才行
第九问
: 我是刚想学 java and 制作 HOMEPAGE 的初学者,
: 而我的 os 只是普通的 dos , 我该何下手?
: 另外, 什麽是 easy html pro?
: 恳请指教!!!!
在 dos 下不行写 java,因为 java 支援 multi-thread
你可以在 win95, WINDOWS NT, SUN ,...等环境下发展
第十问
: 请问 addNotify() 这个method是要做啥啊?
很多 class 都有这 method,功能不尽相同
可以查 APIBOOK
第十一问
> : 当在 Applet 的程式内去 call server 端的 CGI 时
> : 要如何将参数传入 CGI 内呢??
> 如果CGI是用GET,那很简单,开一个URLConnection,
>
> 例:URL可写成http://foo.bar.edu.tw/cgi-bin/fubar?t1=xxx&t2=yyy
> ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
> 用getCodeBase() (可能还要处理) 要给的参数
>
> 如果是POST,那可能就不能用URLConnection,而要用Socket
事实上, 不论用 GET 或 POST, 都可用 Socket (connect to port 80 --
这里假设 http server 是 listen to default port 80). 就好像 web browser
一样. 当然, 你会用 input and output stream 来处理和 server 间的
> 这我当然知道,但既有URLConnection却不用,还要把传回来的东西,像什麽
>
> Content-type, Content-length自己去掉(这是HTTP 1.0才会传的东西)
>
> ,不是多此一举吗? 而且port若非80,还要自己去parse
>
> getCodeBase().toString()这个字串
我并非说不用 URLConnection, 我是指 GET 和 POST 都可以用 Socket 直接和
Server communicate.
对 GET 而言, 如你说的, 是麻烦一点. 另外, 对你写的用法, 我有一些修正,
不对之处, 请不吝指正.
(1) http://foo.bar.edu.tw/cgi-bin/fubar?t1=xxx&t2=yyy
^^^^^^^^^^^^^^
用getCodeBase() (可能还要处理)
是还要处理, getCodeBase().getHost(). 如果不是 default port, 还要找出
port number. (见 (2))
(2) 而且port若非80, 还要自己去 parse getCodeBase().toString() 这个字串
port 若非 80, 有另外的方法找出 port number. getCodeBase().getPort().
当然, 你的方法并不是多此一举, 这两者殊途同归
: 如果CGI是用GET,那很简单,开一个URLConnection,
: 例:URL可写成http://foo.bar.edu.tw/cgi-bin/fubar?t1=xxx&t2=yyy
: ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
: 用getCodeBase() (可能还要处理) 要给的参数
: 如果是POST,那可能就不能用URLConnection,而要用Socket
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
其实还是可以的.......
先开一个 URL connection, 然後从这个 connection 中开一个 output stream,
将资料写入这个 stream 就可以了 :)
补充一点, 开 output stream 其 method 为 getOutputStream
如果这个 URL connection 为 A 的话, A.getOutputStream() 就回传回此 stream
> : > 如果CGI是用GET,那很简单,开一个URLConnection,
> : > 例:URL可写成http://foo.bar.edu.tw/cgi-bin/fubar?t1=xxx&t2=yyy
> : > 用getCodeBase() (可能还要处理) 要给的参数
> : > 如果是POST,那可能就不能用URLConnection,而要用Socket
According to my test, I find that Java implements this problem
by using "POST" method. It will pass the content-length, content-type
... field to the server.
But, if your CGI program can deal with both "POST" and "GET" method,
the way above will be ok!
第一问
: 请问用javac编译好的class是不是一定要放在java\lib下才能用java来run
: 我本来是在java下自已建了一个子目录放我自己写好的一些程式,
: 但是每次编译好後要用java来run时都被告知找不到那一个class,
: 後来我把我编译过的class copy 到lib目录下竟可执行,
: 是不是一定要这样麻烦呢?为什麽java竟"看不到"现行目录下的class呢?
: ps:我的目录如下:
: c:\java+----bin
: +----lib----我的classpath设定在这
: +----include
: +----exercise---我在这儿执行java,*.class,*.java也放这
: and.我将bin列入path中...
: ?
只要 Set CLASSPATH 这个环境变数并用分号分隔多个 Path
Set CLASSPATH = .... ; ...... ; ......
第二问
: 我的程式在编译的时候出现了以下的讯息:
: failed to read:C:\JAVA\BIN\...\lib\javac.propeties
: Motorcycle.java:22:error message'toplevel.expected' not found
: Motorcycle Nsr;
: ^
: 因为学校没开Java的课程,所以我是自己看书学的,对於Java的观念还不甚清楚
: 若是下面的任一步骤有错还希望大家多多指教....
: 我将程式码附在底下,希望能够得到您的宝贵意见,谢谢!
: package TrafficTools; //宣告一个名为 TrafficTools的package
: //请问在这一行一定要import任何类别吗?
: (例如:java.applet.Applet)//
不一定 除非你须要其他类别 but default import java.lang.*
: //需要在这一行宣告介面并交给Motorcycle去implements吗?
不一定 当你有须要时
:
: Motorcycle Nsr; //宣告Nsr为Motorcycle类别的样板,并继承Motorcycle
: Nsr=new Motorcycle(); //建立Nsr物件
: Nsr.Count(); //利用Nsr物件使用 Count() 这一个method
这三行须要写在 Motorcycle class 的 main Function 内 因为这不是像 C++
class Motocycle {
// 一个 Java Application (not Applet) 一定要有的 function
public static void main(String Args[]) { // 程式的起点
Motorcycle Nsr;
Nsr = new Motorcycle();
Nsr.Count;
}
}
第三问
: 我是想将这个applet放在homepage上,那也要写 main function吗??
: main function好像不能放在homepage上吧....
对啊 !! application 才须要啊 !! applet 是用 init() 且 Motorcycle 要继承
applet . 而不必 new Motorcycle Object 因为这是 Browser 做的
: 还有一点疑问是 Motorcycle Nsr;
: Nsr = new Motorcycle();
: Nsr. Count();
: 这三行一定要写在Motorcycle这个类别里吗?
: 请指教,谢谢!
Yes ...
Java 没有 Gobal 的任何东西
第四问
> : 据说CGI程式可以用任何程式语言来写是吗 那麽可不可以用Java来写呢
> : 如果可以 请问
> : 要用那个class及method来取得client传来的资料呢 (通常从stdin)要怎麽写
> : 而client端要如何呼叫server的Java CGI程式 例
: action="http://xxx.dom.???.tw/cgi-bin/___________">
> 再补充一下 是在win95下 不能用symbolic link.
1. CGI 可以用 Java 写. 这个 Java 程式是 Application 而非 Applet.
2. 通常这个程式会有像这样的 code:
import java.io.*;
...
DataInputStream instring = new DataInputStream(System.in);
PrintStream outstring = new PrintStream(System.out);
string HTMLout;
while ((input = instring.readLine()) != null) {
// Do what the CGI program should do
// then, write output using outstring.println(HTMLout);
}
outstring.close();
...
3. 至於 Client 端如何呼叫, 这是一个问题. 如果用
ACTION="http://xxx.dom.???.tw/cgi-bin/xxx.class"
除非 Web server 直接支援执行 Java 程式, 否则, 会有问题.
Java 程式是需由 interpreter 执行的. 可能的一个变通方法,
就是执行某个类似 shell 的程式 (如 *.bat, 假设在 Win95),
其中执行 java xxx.class. 我没有试过是否可行?
4. 不需要 symbolic link.
第五问
>: : 请问一下要如何在TextField中输入中文?
>: : 谢谢
>: Java 字元是 Unicode,中文 big5 码可能不行.
> 谢谢<
> 那如果我用TextField做Applet要如何让
> Web使用者输入中文呢?
目前所知是只能用copy & paste 输入big5的中文 !
第六问
>如果想学java
可至段先生的站台:http://atmwww.cm.nctu.edu.tw/~duann/javascript/script.html
第七问
介绍一个学习 Java script 的站
http://www.essex1.com/people/timothy/js-index.htm
里面有 clock,banner,timer,color 等 java script
的范例喔!!
第八问
: I have a problem about use a Applet to communicate with web server's CGI
: program. Explan as below:
我猜原因是
: try{
: URL sortURL=new URL("http://my.address/cgi-bin/test.sh");
^^^^^^^^^^ 这边不能hard-coded
一定要用getCodeBase().getHost()
因为SecurityManager会去检查该hostname
与含有这个applet的homepage的URL中
的hostname做字串的比对,它并不管你hostname
与IP address是否对应到同一台机器,只要不一样
就会有SecurityException,这个讯息应会秀在
browser下面的status栏
: URLConnection connection= sortURL.openConnection();
: PrintStream outStream=new PrintStream(connection.getOutputStream());
: outStream.println("my data to send");
: outStream.close();
: }
: catch........I have a problem about use a Applet to communicate with web server's CGI
第九问
: 小弟有个疑惑就是
: 像:
: imports java.awt.Graphics
: java.awt是个PACKAGE
: 其中含有Graphics的Class
: 这点 m...没问题,可以理解
: 好...那:
: System.out.println("...");
: System.out是变数??
: 变数里有Method?? 奇奇...写了java一段期间,每次写到这儿都觉的无法接受..
: System这锅东东不知是何方神圣?? 是package ,是class 还是variable
: 真是让我迷糊.. 有谁能说说System是怎样implement 出来的?
: bye~
您好:
这个问题是这样(答错别怪我!):
先列出 System 这个 class:
public final class java.lang.System extends java.lang.Object
{
// Fields
public static PrintStream err;
public static InputStream in;
public static PrintStream out;
// Methods
public static void
arraycopy(Object src, int src_position,
Object dst, int dst_position, int length);
public static long currentTimeMillis();
public static void exit(int status);
public static void gc();
public static Properties getProperties();
public static String getProperty(String key);
public static String getProperty(String key, String def);
public static SecurityManager getSecurityManager();
public static void load(String filename);
public static void loadLibrary(String libname);
public static void runFinalization();
public static void setProperties(Properties props);
public static void setSecurityManager(SecurityManager s);
}
您可以看到 in 及 out 都是 class variables,所以要使用它必须用全名,如 System.in
而 in 及 out(包括err) 都是 reference,in 是一个 InputStream 物件的 reference,
out 是一个 PrintStream 物件的 reference,当 System 这 class 被 load 到程式里时,
它会自动产生一个 InputStream(PrintStream) 的物件,然後配给 in(out) 这个 variable,
所以 in(out) 就可以使用 InputStream(PrintStream) 物件的 instance methods.
这样不知清楚吗?
第十问
: 请问已编译好的 CGI 程式是否一定要放在 server 端的特殊目录下???
: 如果没有网路环境(单机) 该如何测试?
: PS:以 VB 撰写
> NCSA版的httpd可以允许CGI程式以,*.cgi的方式存在并执行而不必放在 server
> 端的特殊目录下,我想你可以试看看,如果不行的话那我想你还是在你的
> 机器上装一个server可能可以解决.
> 如果你成功了请告诉我如何完成的!!
单机的话 还是有办法解决 只是一些unix上的指令用起来会有trouble
首先可架个ncsa的whttpd (不知有无95版???)
若用VB的话 我的作法是将它compiler成exe档於c:\httpd\cgi-win目录下
若用perl的话 就架个perl5在c:\usr\local\lib\perl下 当然要在pif档
及httpd.cnf档略作修改 然後将*.pl放在c:\httpd\cgi-dos目录下
以http://127.0.0.1/cgi-dos/*.pl 或 http://127.0.0.1/cgi-win/*.exe
就可在单机执行cgi程式 test ok之後再upload至server中 较省钱说
或许有错 请指教
*对 lynx 2.5 也可以单机行 CGI 程式,无需安装 httpd
*在95或nt上, 可以自己设一个虚拟的ip
再加个站, 然後http到那个ip就可以了
第十一问
: : 也就是说要如何把: *.class ===> *.java
: : 转变
: 目前不可能.
有限度上可能
http://web.inter.nl.net/users/H.P.van.Vliet/mocha.htm
第十二问
: 当我在用getGraphics时
: 他要求要off-screen 的image
: 怎麽样的image才算off-screen 的呢
嗯!off-screen是说你不是从档案抓上来的image
而是从createImage(可能是这个忘了还要查书)这个method
做出来的Image大体上简言之可这麽说呢?
第十三问
: I have a problem about clipRect(..),a member function of
: class Graphics..
: In my applet,I must update two parts of Rectangle when a
: paint event is driven.So I wrote the program as follow..
: public void paint(Graphics g){
: :
: g.clipRect(..); // first part needs to update
: :
: g.clipRect(..); // second part needs to update
: :
: }
: But the result was so strange.Only the first part could be
: updated.Second part would not be active.
: Why? Who can tell my how to solve the problem? Thanks!
This method will set a clipping rectangle for this graphics context.
The resulting clipping area is the intersection of the current clipping area
~~~~~~~~~~~~
and the specified rectangle.
Thus, after the first calling of this method, the "current" clipping area
would be the first rectangle part, and if the second rectangle part were
a standalone one(that is, without intersecting in first part), then the
"current" clipping area might be EMPTY!(becouse no intersection) That is
why the second action was fail.
In my opinion, you can try to put a code between these two methods calling,
such as:
:
g.clipRect(..);
:
g.clipRect(the whole graphic(image) area); //new added line
:
g.clipRect(..);
:
**Thanks for your help.I have made an experiment about you
suggestion.I found somethings right,but still somethings
wrong what you wrote above!
In your opinions,the intersaction effect of clipped areas
was correct.But the method to reset the clipped area you
suggested was wrong.Clipped area could not be reseted by
the method of
g.clipRect(full area of graphics); or
g.clipRect(0,0,0,0);
in my experiment.
But
I have a new solution about this problem.This solution use
the method,Graphics::create(),to get a new copy of current
graphics context. You can re-clip the demanded area in the
new Graphics object & then do what you want to do.By this
way, you can avoid the intersaction effect of clipped areas.
第一问
> 1)那个 LEDSign V2.7 可以读中文字型吗??
>
> 2)字型档(*.font)的结构,有没有哪位前辈可以教教我呢??
>
> 3)看版控制档(*.led)的结构,也教教小弟好吗??
*根据自己摸索可以显示中文,但必须在*.font档中,写下你要的字的(*),
而font档只要try一下就可以,*.led档翻翻字典试看看,相信不久就能
了解.
*从旧版就一直可以的, 可以参考 http://esunbank.com.tw
*我是一个LED-SIGN的使用者
说一些我的经验
关於上面第一点
是可以的
只要去nctuccca.edu.tw /Chinese/ifcss/software/dos/banner中
用FTP抓 cbanner.exe 这一个档案
这是一个将中文或其他文字变成以'"组成的大文字....
在WIN95中的使用办法是
先要有ET等的中文字形程式
进入DOS下执行ET
再键入cbanner -p 进行安装你要的字型(如明体 隶书?.......)
回WIN95中执行cbanner就可以看到变大的字型
按上面的字型旁的"标示"键.就可以将变大的字型剪贴下来
--
再到http://www.cs.ccu.edu.tw/~sjs84/cled.html#modify中
抓修改过的class(Download)和font(cfont和cfont24)和他的demo.led
以编辑HTML的软体编辑
可以将以刚才方式抓的变大字形加入cfont.font中
看看说明吧
第二问
> 有关action这个method不是有true&false的传回值吗?
> 不知道有没有人有范例教人怎麽去应用这传回值...
> 也就是程式当中如何知道action被执行了(当然是某个button被按了 或者是..)
> 然後在加以判断其结果是不是你要的,不知道这段判断的程式码要加在哪边才好..
>
> if(action(Event evt,Object obj) == true) {
> ...........
> }
> else
> ...........
一个程式片断请你参考 :
public boolean action(Event evt, Object what) {
if (evt.target instanceof Button){
// 只处理 Button 所产生的 action, 其它的不管
....................
return true;
}
else
return false;
}
: 那请问这个action method的传回值要怎麽去接收呢
: 因为只有当我们按下Button的时候 action才会处理这个事件 然後在传回
: true or false,这是我要怎麽抓住这个时机将这个传回值加以利用呢
: 这才是我真正的问题
其实您可能想法上有些问题...
最重要的一点, 就是我们只要把 action method 的传回值,
看成是系统在用的就好了. :)
而我们是「写」action 让系统 call 的人, 我们只要用
^^^^^^^^^^^^^^^^^^^^
(应该是说 "Override" action 这个 method 来作处理..)
return true; 或 return false; 来告诉系统在这个 action method 中,
我们有没有去处理该事件即可.
> 那请问这个action method的传回值要怎麽去接收呢
> 因为只有当我们按下Button的时候 action才会处理这个事件 然後在传回
> true or false,这是我要怎麽抓住这个时机将这个传回值加以利用呢
> 这才是我真正的问题
你不用去管它的 return value, 我举个例好了, 你可以在 container 上
面 add 一个 button 对吧? 那麽 mouse 移到这个 button 上面, 到底
是 button 会收到 mouse enter event ? 还是底下的 container 会收到
这个 event ? 这时 button 会先收到, 如果你 handleEvent 的传回值
是 false, 代表 button 没有去处理这个 event, 这时被它压在底下的东
西 (在这里是 container) 的 handleEvent 就可以收到这个 event ...
传回 true 的话, 这个 event 就不会再往底下传了. 你不用管别人传回
true or false, 你只管自己要传回 true or false 就好了
第三问
: 请问有没有人知道如果使用 java 来 ftp 某一个档案呢?
: 我用 xxx = new URL("ftp://机器名称/档案名称");
: 但执行时他告诉我 unknown protocol : ftp
在 Java 中有一种 class 可直接作 ftp 的工作
如果记的没错的话, 不是在 java.net 就是在 sun.net 下
查查看 tutorial or book 就可以找到了, 在 Java! 中
还有一个 20 多行的 ftp 范例程式喔
第四问
: static这个method modifier是做什麽用的呢
: 小小问题..谢谢您的回答喽!!! :))
嗯. 让你的变数或方法.
成为所谓的 class variable(method)
例如 java.Math.* 的 method 都是 static 的.
就不需要先作一个 java.Math 的 instance.
可以直接以 java.Math.sin(...) 叫用.
第五问
>请问如何将婺字的string 转为 int
String s="123";
int num;
num = Integer.parseInt(s);
第六问
> 我抓了JDBC回来 解开之後 利用JAVAC 时 却告诉我找不到 SQL 的CLASS
> 由於我是生手 不太知道其COMPILER如何去找他须要的PACKAGE.
> 我用IMPORT JAVA.SQL 可是就是找不到??不知道是不是目录的问题??
> 有没有可以告诉我??谢谢!!
当你解开後,会产生一个 jdbc 的目录,
而且 SQL 的 CLASS 会放在 jdbc\classes\java\sql 内.
你就在 autoexec.bat 内加下列的内容:
set CLASSPATH=d:\jdbc\classes;
然後重新执行autoexec.bat,这样就可以了.
切记千万不要将 sql 的目录搬到 java\lib\java 内.
我试这个东西花了我快一个月的时间 :~~(
後来我重灌 win95 才OK...
> JDBC是有何功能?FTP上有吗? 档名为何?
JDBC 就是 Java DataBase Connectivity 的缩写.
是使 Java applet (application) 有能力对关联式资料库做运算.
放在http://java.sum.com里.
第七问
> public class MyStandAlone {
> public static void main(String args[]) {
> System.out.println("Hello World!");
> }
> }
> #这是我的 MyStandAlone.java 档! 用 javac compile 成 .class 档!
>
> #这是我的 MyStandAlone.html 档
> #之後用 appletviewer MystandAlone.html 看! 在 appletviewer 上出现
> start: applet not initialized
> 这是啥原因啦!??
拜托, 你写的程式又不是 Java Applet , 当然没有办法用 appletviewer 看啊,
直接用 c:\>java MyStandAlone
就可以看到画面上出现一行 Hello World! 字样,
> 那如何才能在 appletviewer 上看到 Hello World! 呢?
> 要改那里呀?? :)
那你的 class MyStandAlone 必须 继承 applet
而且必须按照 applet 的规矩来写程式, 当然也不能用
System.out.println , 而必须利用画图,
或者 showStatus 来输出字串在 applet .
底下是使用画图的方法:
--------------
import java.applet.*;
import java.awt.*;
public class MyStandAlone extends Applet
{
public void paint(Graphics g)
{
g.drawString("Hello World",25,50);
}
}
以上的范例, 是在 Applet 中的 (25,50) 位置画出字串 Hello World .
我想书上的 Applet 部份应对这部份会有所说明才是.
JAVA Q&A第五集
客倌上菜了哟.................
> 就是如何使两个同在一个htm中
> 的java applet能互传数值....
目前光用 Java 是没有办法做到这点的... 每个 applet 都是彼此独
立的, 两者间想要沟通你得绕一大圈... 比如在你的 Web Site 写个
Server来帮助这两个 applet 沟通, 或是xxxx.... 等等.
不过你可以去 JavaSoft 的 homepage 看看, 在一篇评论 ActiveX
的文章中就题到这一点... 你的这个问题用 ActiveX 的解决方案很
容易就可以做到, 不过这方面我不熟, 你自己去找找相关资料吧!
Netscape 提了一个 LiveConnect 架构
让 Homepage 中的 Java Applet, Java Script, Plug-in 之间能有互动
有兴趣的话可参考看看
可以吧! 看看Sun的Java tutorial的applet InterClass Communication部份吧
(http://java.sun.com/books/Series/Tutorial/applet/communication/iac.html)
同一个page上的applet还是可以彼此沟通的
@应该有很多方法:如使用AppletContext 利用static variable
有兴趣去www.tientien.com/tjn/iac/index.html这个地方看看
可以用这样吗?? ---
public class object1
{
String histring;
public void sets(String s)
{
histring=new String(s);
}
}
public class object2
{
public boolean mouseDown(Event e,int x,int y)
{
object1 ob1=(object1)getAppletContext().getApplet("object1");
ob1.sets("Hi!!!");
}
}
用这样侦测一个mouseDown,从object2传一个"Hi!!!"给object1.....
嗯,没试过 .....不知道对不对 .......
我建议你去看一本叫""JAVA程式设计入门(陈建荣,王子裕,林湘茗编著)....
在第五章 APPLET 中有二个 APPLET同时沟通的范例程式....不妨去看看吧..
P5_3.HTML >>>>>>>>>>>>>>>大约在5-20页
: 请问目前 java是否已有可 show bmp image 的 class ? 或是各位网
: 友有这方面经验者,可否指点一二 ?
: Thanks in advance ... :)
据我所知, Java 只直接支援 gif & jpeg 格式 image.
: 请问有那位网友知道"专家系统"??
: 弟想了解,可否介绍几本书?
介绍你一本专家系统的书
全欣资讯 专家系统-方法应用与实作 中文版的 $390(附磁片)
作者 郭耀煌(为成大资研所的老师)
内容满简单的.主要为概念的介绍.还有一些经典的范例哦!
至於有关的程式语言就介绍的较少
不过这书仍旧适合初学者自学的
中文的书都很久了, 都是七十年代的古书, 松岗去年有出一本新书!!
书名叫做"Prolog与专家系统", 名字大概是这样!!
目前全世界No. 1 的专家系统G2 Real Time Expert System. 由本公司代理
你想要了解专家系统可以连络本公司Dr. Chen
> 我想写一个applet.....其中要把一些资料传回server去存起来....
> 可是书上说applet没办法用socket...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Applet could use SOCKET. See java in a nutshell this book. Specially about
Chapter 7(Networking), it provide examples that implement as APPLET!!
Applet 可以用 socket, 但是只限於跟放这个 applet 的 host 之间
沟通而以. 想要连出去的话, 还得自己在 host 上写个 server 帮你
转...
socket 的用法, 跟 UNIX 的 socket 大同小异吧? 看一看有关 java.net.*
的 api 应该就可以了
: Inside JDBC, it provide a SimpleSelect.java program. I had compiled it okay.
: But, when I want to run it (java SimpleSelect).....Error message appear:
: java.lang.......classNotFound:Jdbc/Odbc/JdbcOdbcDriver
大概是它找不到jdbcodbc.dll吧? 这个档在\jdbc-odbc\classes\jdbc\odbc\
下面,把它拷到路径中任一目录下试试...
: 我刚用Visual J++,
: 於是写了一个所有教科书都有的小程式--Hello.World!
: compile和build时都过了!
: 执行时却出现java.lang.UnsatisfiedLinkError
: 不知到是那出了问题,是有那里没设定吗?还是没装MS IE3.0的关系呢?
: 请各位高手不吝指教!!
: 以下是程式内容:
: class Hello
^^^^^^^^^^^^^^^^^^^^:
试看看 class Hello extends Applet
: {
: public static void main ( String args[] )
: {
: System.out.println("Hello.World!");
: }
: }
另解
> class Hello {
^ 前面加上 public ... 整个程式的主 class 必须要 public , 才可以被执行
: > class Hello {
: ^ 前面加上 public ... 整个程式的主 class 必须要 public , 才可以被执行
: > public static void main ( String args[] ){
: > System.out.println("Hello.World!");
: > }
: > }
不一定吧? 据我所知, 只要 main() 是 public 就可以了.
请指教.
对不起!我是原先的post者,首先感谢大家的不吝指教!!
原先的程式我用JDK编译执行过,可以正确执行!
所以程式本身并无问题,所以问题应是出在Visual J++上,
而各位提供的各种方法我都试过了,都不行耶!
因此希望大家帮我想想是否在Visual J++出了什麽问题!谢谢!!!....
: 在下初学, 想请问前辈有没有能够帮忙转中文字给LED的程式呢
试试小弟写的程式.
1. 你需要有倚天的字型档, 修改一下路径, compile
就可以用了.
2. 要用 24x24 字型也可以, 程式要稍做修改, 需要请通知我.
3. 执行後把输出导相到一个档案, 前面三行加上'字高' '字宽'
'字数' 的参数即可当led 的 font file.
有任何疑问欢迎与我联络.
e-mail:ftlin@casa.ntit.edu.tw
home page:http://casa.ntit.edu.tw
------------------------------------------------------------------
#include
void main()
{
FILE *inf,*inf1,*rd;
unsigned char a[72];
unsigned char
unsigned b;
int i,j,k,l=0;
unsigned char c[513];
/* set et3 font path here */
/* if you use dos, change '/' to '\\' also */
inf=fopen("/home2/users/casa/xcin/et3/spcfont.15","rb");
inf1=fopen("/home2/users/casa/xcin/et3/stdfont.15","rb");
if(inf==NULL)
exit(0);
printf("请输入要转换的文字:");
scanf("%s",c);
while(c[l]!='\0')
{
b=c[l]*256+c[l+1];
if (c[l+1]>0xa0)
b-=34;
if(b>=0xa440)
{
b-=(c[l]-0xa4)*99;
fseek(inf1,(long)(b-0xa440)*30,SEEK_SET);
rd=inf1;
}
else
{
b-=(c[l]-0xa1)*99;
fseek(inf,(long)(b-0xa140)*30,SEEK_SET);
rd=inf;
};
for(i=0;i<30;i++)
fscanf(rd,"%c",&a[i]);
printf("\n%c%c\n15",c[l],c[l+1]);
for(i=0;i<15;i++)
{
printf("\n");
for(j=0;j<2;j++)
for(k=0;k<8;k++)
{
if(a[i*2+j] > 127)
printf("#");
else
printf(" ");
a[i*2+j]<<=1;
};
};
l+=2;
};
printf("\n");
fclose(inf);
fclose(inf1);
}
: 现在要用 java 做到在 client 端 run 一个 applet
: 同时我在 server 端也执行一个 java 的 application
: 用来接收 client 端所送回的 message...
: 就有点像 cgi 程式 但我还需要做一些其它的判断
: 所以一定要用 java 来写......
: 请问 这要如何处理??
两方都使用socket 就可以做 client-server了, 看看java.net 里面的一些class
: 不知道java可否在Server端存取档案呢
: 又 听说Java可以扮演CGI的角色
: (不知道这样的观念对不对)
: 那为何网上的applet大多只有在动画上打转呢
有好几种方法可在java 中让applet 存取server 端档案,一是用socket
在server上有一接收程式来执行applet 所要的动作(当然就可以包括档案存取了)
另一是用URL 这个class 也可以读取server 上的档案(至於存档我则没用过,所以
不知道可不可以).
: 就是在图形重叠时不画不要的颜色
: 用g.drawImage会将整个四方形都画出来
: 如何能做到SPRITE呢
只能指定 drawImage 时候的透明色要用那种颜色替代 没办法画出重叠
时下面那张图案.... 至少我看 API reference 是这样说的....
用LVIEW PRO一下就好了......何必找麻烦......:)
@@@@@ 首先要设法让你的图形中要成为透明色的部份变成统一的某一种颜色,
我的方法是先在Lview的Option的选单下设定Background color,
要先选择要设为透明的底色, 再选择Mark selection using的选项
看看是否是设定到的背景颜色是否正确,
最後以GIF 89a的格式存档
我也算是初学者,
前一阵子试过将两张图片叠在一起,
并让前景的不规则图形能在复杂的背景下移动:
Image foreground,background;
......
Graphics gr;
gr=this.getGraphics();
gr.drawImage(background,x1,y1,null);
gr.drawImage(foreground,x2,y2,null);
其中foreground就必须经过Lview的处理
至於为什麽在drawImage第四个参数 ImageObserver 要设为 null 我就不知了
> 我使用 JAVAH.EXE 程式去将 某个 .CLASS 档案产生 .H 档时发生问题,
> 我执行下列命令:
> F:\JAVA\BIN\JAVAH.EXE Simple (在目录下有 Simple.class档案)
> 它给我的 error message 是 "Simple: no such class"
> 可是在目录下确实有 Simple.class 档案,
> 我的 CLASSPATH= .;F:\JAVA\LIB\CLASSES
> 希望各位先进帮帮忙, 谢谢 !!!
你肯定大小正确吗???
还有,好像要打F:\JAVA\BIN\JAVAH.EXE Simple.class 才行
不要想得她太聪明.
应该不是打全名吧 ? 若打全名即 simple.class, javah会找 Simple目录下的
class 档案, 不过 error message 还是 "no such class"
Cafe 1.2里头附的javah有此问题,改用JDK 1.02的就行了
> 我目前是用 SUN JDK 1.0.2, 但结果还是一样
我知道原因了,你没设classpath这个变数
通常是如下设定
set clasapath=c:\java\lib\classes.zip;.
^^^^^^^你的JDK所在目录
cafe里的javah应没问题,也是忘记设classpath所致
>依照你的方法一试, 确实可以了谢谢你.
>可是我原来所设定的 CLASSPATH=.;C:\java\lib\classes.zip 为何不行 ?
>後来我到 comp.lang.java.programmer 去找看看有无解答,
>终於找到有一篇相同问题的答案, 将它引述如下:
==========================================================
>javah HelloWorld.class
>to get header file, but I get from javah the error: "no such class"
>What did I wrong ???
Hi Zoran,
I assume that in you class you do define a 'native' method.
Problem:
This is a somewhat known problem in the JDK 1.0.2 (It wasn't in
1.0.1). What
is happening is javah is messing the first entry in your CLASSPATH
environment. Usually this is equal to '.;' --which represents the
current
directory. So, when we run javah is messes up the current directory
entry in
CLASSPATH and therefore can't find the class you are trying to get a
header
file out of.
Work around:
Create a c:\temp directory (or whatever depending on platform) and
that add
'c:\temp;' to the beggining of the CLASSPATH variable.
This worked for me.
Regards.
Andrew Idsinga
Symantec Product Support
Win Devtools (C++/Cafe)
==============================================================
它的意思大概是若设定 classpath=.; 的话, javah
似乎对於第一个所设定的path (也就是 ".") 视而不见. 因此在 "." 再插入
其它目录来骗过它. 或是依照你所写的, 将 "." 摆在最後.
我有做一个实验, 有关上述 path 问题如下:
执行命令: javah HelloWorld
(1) 设定 CLASSPATH=.;c:\java\lib\classes.zip
错误 ==> "HelloWorld: no such class"
(2) 设定 CLASSPATH=C:\java\lib\classes.zip;.
OK
(3) 设定 CLASSPATH=.;.;c:\java\lib\classes.zip
OK
(4) 设定 CLASSPATH=.;;c:\java\lib\classes.zip
OK
(5) 设定 CLASSPATH=;.;c:\java\lib\classes.zip
OK
: 我有一个 Applet 程式, 其中有一段要抓取这个 applet 的 name, 但是每次用
: getParameter("NAME") 时, 传回值都是 null, 片段程式及HTML档如下,
: 希望各为帮帮忙, 谢谢 !!!
: <... skip...>
: myName = getParameter("NAME"); // <----
: Label senderLabel = new Label(" (My name is " + myName +
: <...skip...>
: HTML 档
: [ applet code="Sender.class" width=400 height=200]
: [ NAME = Sender]
: [PARAM NAME="RECEIVERNAME" VALUE="receiver"]
^^^^^^^^^^^^
这里要和 getParameter("XXXX") 里的一致..
若想得到 "Sender", write
若想得到 "RECEIVERNAME", write
: 对不起, 我是原发信者, 我没有把问题说清楚, 我的目的是要抓 applet
: instance 的 name, 而不是某些用 传进来的
我记得Java tutorial里讲得很清楚,
用java.applet.getApplet(String name)即可
不是用getParameter()
请问cafe的一般版和完整版有什麽差别?
: > 如标题所询问 我想知道到那里可取得其操作手册 最近刚由松岗买了一套回来
: > Install了老半天(差点让我发火耶 近来才发现 原来Install能耗时这样久 )
: > 可是无操作手册可参考耶
NCTUCCCA/vendor/symentec/doc/cafeguid.zip
我用过!
不过resource好像不能用的样子呢?
我在应用电脑展里有去听symantec caf'e的说明会
resource在双位元版本的os下有问题..
过一阵子才会解决吧!!
> 有些Page中的applet,
> 我选了之後它又自己开了一个新window,
> 就执行在新的window之中....
> 这该如何做到呢??
applet 中 instance 一个 calss , 此 class 继承了 frame
public class test extends Applet
{
public void init()
{
TestFrame tf = new TestFrame();
......
}
}
class TestFrame extends Frame
{
.....
}
> 请问 Visual J++ 是不是不能SHOW 中文
是的, 大概得等双位元版才有办法吧?
symantec cafe 可以show 中文
可是resource不能用
最近终於试出native method, 有点心得分享
使用native method的步骤请看Sun的java tutorial部份
这里要说的是tutorial里没讲清楚,也是最关键的一步,就是
制作出native method的.DLL(Windows 95), 我在网路上看到
的作法如下, 第一要有MSVC (2.1版以後,我是用4.0), 第二要有
Cafe,因为link时须要javai.lib, 但JDK附的不是MSVC看得懂的coff
格式, 而Cafe里有附javai.lib_coff, 我不知Visual J++里是否有..
编译的命令列参数如下, 以tutorial的HelloWorld为例
cl -FeHello HelloWorld.c HelloWorldImp.c /Ic:\cafe\java\include
/Ic:\cafe\java\include\win32 /MD /LD c:\cafe\java\lib\javai.lib_coff
参数-Fe表示输出的执行档名称(为Hello.dll)
/I为include files path
/MD表示与MSVCRT.LIB link
^^^^^^(MSVC Run-time Library)
/LD表示制作.DLL
完毕後即产生Hello.dll, 其余的请参考tutorial
: 在AWT中的所显示的label及botton的中文
: 能否改变字型,大小及颜色
Label ll;
Button bb;
Font font;
public void init()
{
this.setLayout(null);
ll = new Label("LABEL");
bb = new Button("BUTTON");
font = new Font("Helvetica",Font.BOLD,30);
ll.reshape(int x,int y,int width,int height); //change size
bb.reshape(int x,int y,int width,int height);
ll.setFont(font); //set FONT
bb.setFont(font);
this.add(ll);
this.add(bb);
}
> 不知道java有没有方法可以抓 thread 的id 或 thread 资料结构
> 该怎麽用呢? 可不可以自己来杀掉不必要的 Thread 而不要由系统来杀呢 ?
抓某thread的资料,用toString()或getName()
要杀某thread, 用stop()
欲知目前thread group有哪些threads, 用
ThreadGroup c=Thread.currentThread().getThreadGroup();
int num_threads=c.activeCount();
Thread threads[]=new Thread[num_threads];
c.enumerate(threads, false);
threads[0].stop(); //如此便可杀掉一个thread, 不过最好别乱杀,有些
//是系统(Java VM)的thread
详细用法请参考java.lang.Thread及java.lang.ThreadGroup
的API ,完整的code可参考Java in a Nutshell (p162-163)
或到http://www.ora.com/catalog/javanut/examples/section9/ThreadLister.java
: 我写了一个小小的Applet...
: 用途是随意图画....
: 可是我不知道如何设定线条的宽度...
: awt.Graphics有提供这种 member function吗??
没有,如果真的要用的话,只好要 drawLine() 多画几次吧!!!!!