1.程序結(jié)構(gòu)
Java語言的源程序代碼由一個或多個編譯單元(compilation unit)組
成,每個編譯單元只能包含下列內(nèi)容(空格和注釋除外):
* 一個程序包語句(package statement )
* 引入語句(import statements)
* 類的聲明(class declarations)
* 界面聲明(interface declarations)
每個Java的編譯單元可包含多個類或界面,但是每個編譯單元卻至
多有一個類或者界面是公共的。
Java 的源程序代碼被編譯之后,便產(chǎn)生了Java字節(jié)代碼(bytecode)。
Java的字節(jié)代碼由一些不依賴于機(jī)器的指令組成,這些指令能被Java的
運(yùn)行系統(tǒng)(runtime system)有效地解釋。Java的運(yùn)行系統(tǒng)工作起來如同一
臺虛擬機(jī)。
在當(dāng)前的Java實(shí)現(xiàn)中,每個編譯單元就是一個以.java為后綴的文件。
每個編譯單元有若干個類,編譯后,每個類生成一個.class文件。.class
文件是Java虛機(jī)器碼?
2. 詞法問題
在編譯的過程中,Java源程序代碼中的字符被劃分為一系列的標(biāo)記
(token)。Java編譯器可以識別五種標(biāo)記: 標(biāo)識符、關(guān)鍵字、字面量、運(yùn)
算符以及特殊分隔符。注釋以及諸如空格、制表符、換行符等字符 ,都
不屬于標(biāo)識之列,但他們卻常被用來分隔標(biāo)記。
Java程序的編寫采用泛代碼Unicode字符集,若采用其它的字符集,
則需在編譯前轉(zhuǎn)換成Unicode。
2.1 注釋
Java語言提供了3種形式的注釋:
//text 從//到本行結(jié)束的所有字符均作為注釋而被編譯器忽略。
/* text */ 從/*到*/ 間的所有字符會被編譯器忽略。
/** text */
當(dāng)這類注釋出現(xiàn)在任何聲明之前時將會作特殊處理,它們不能再用
在代碼的任何地方。這類注釋意味著被括起來的正文部分,應(yīng)該作為聲
明項目的描述,而被包含在自動產(chǎn)生的文檔中。
2.2 標(biāo)識符
標(biāo)識符的首字符必須是一個字母,下劃線("_")或美元符號("$")。 后
面的字符也可是數(shù)字0-9。 Java使用泛代碼字符集,為了便于識別好一
合法標(biāo)識符,下面列出它的“字母”:
* 大寫字母“A”~“Z”
* 小寫字母“a”~“z”
* 泛代碼(Unicode)中所有字符編碼在十六進(jìn)制數(shù)00C0之前的字
符。標(biāo)識符中,首字母后的字符可以是任意的。當(dāng)然,Unicode區(qū)段中
那些被保留作特殊字符的除外。
由此,“garton”及“MjΦlner”都是合法標(biāo)識符,但是,包括
諸如“π”的字符串卻不是合法的。
為了取得更多的有關(guān)泛代碼標(biāo)準(zhǔn)的信息,請參閱“The Unicode
Standard”,“World Wide Character Encoding version 1.0,volumes 1 &
2”,Unicode公司的FTP地址是unicode.org。
2.3 關(guān)鍵字
下面的標(biāo)識符被保留用作關(guān)鍵字,他們不能作任何其它的用途。
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
其中,加*標(biāo)記后是被保留但當(dāng)前卻未使用的。
2.4 字面量
字面量(literal)是某些類型值的基本表述,這些類型包括整型,浮點(diǎn)
型,布爾量,字符及字符串。
2.4.1 整型字面量
整數(shù)可有三種表示形式: 十進(jìn)制,八進(jìn)制和十六進(jìn)制。一個十進(jìn)制
整型字面量由一系列的數(shù)字組成,但它的第一個數(shù)字不能是0(有時十進(jìn)
制數(shù)字也可象下面講的那樣加后綴)。整數(shù)也可表達(dá)成八進(jìn)制或十六進(jìn)制
形式。以0開頭的整型字面量,意味著它是一個十六進(jìn)制的。十六進(jìn)制
整數(shù)可以包括數(shù)字0-9以及字母a-f及A-F。八進(jìn)制整數(shù)中則只能是出現(xiàn)
數(shù)字0-7。在超過32位所能表示的范圍之前,整型字面量的類型即為int,
否則為long型。一個整型字面量可通過加后綴L或l而強(qiáng)迫成long型。
下面的均為合法的整型字面量。
2 2L 0777
2.4.2 浮點(diǎn)字面量
一個浮點(diǎn)字面量可包括以下部分: 一個十進(jìn)制整數(shù),一個小數(shù)點(diǎn)“.”,
小數(shù)部分(另外一個十進(jìn)制整數(shù)),指數(shù)部分,一個類型后綴。指數(shù)部分
是一個e或E后跟一個整數(shù)。浮點(diǎn)字面量至少包含有一個數(shù)字,外加或
者一個小數(shù)點(diǎn)或者一個e(或E),下面舉一些浮點(diǎn)字面量的例子:
3.1415 3.1E12 .1e12 2E12
就象在后面描述的那樣,Java語言有兩種浮點(diǎn)類型: float 及
double,用戶可按以下寫法區(qū)分:
2.0d或2.0D double 型
2.0f或2.0F或2.0 float型
2.4.3 布爾字面量
布爾(boolean)字面量有兩個值: true及false。
2.4.4 字符字面量
字符字面量是一個由單引號括起的字符(或者是由一組字符來表述
一個字符)。字符屬于char類型,并且均從泛代碼字符集中得來。而下面
列出的轉(zhuǎn)義序列則用來描述一些非圖形字符,它們以反斜杠“\”開始以
作轉(zhuǎn)義用。
續(xù)行符頭 \
換行 NL(LF) \n
垂直制表符 HT \t
退格 BS \b
回車 CR \r
走紙換頁 FF \f
反斜杠 \ \\
單引號 ' \'
雙引號 " \"
八進(jìn)制數(shù) 0ddd \ddd
十六進(jìn)制數(shù) 0xdd \xdd
泛代碼字符 0xdddd \udddd
2.4.5 串字面量
串字面量是雙引號引起的零個或多個字符的序列。每個串字面量被
看作是一個串對象,而并非是一個字符的數(shù)組,例如“abc”創(chuàng)建了一
個新的串類的實(shí)例。下面的都是合法的串字面量:
" " \\空串
"\" " \\只包含一個雙引號的串
"This is a string"
"This is a \
two-line string"
2.5 運(yùn)算符及特殊分隔符
下面這些字符在Java源程序中作運(yùn)算符或分隔符用:
+ — ! % ^ & * | ~ / > <
( ) { } [ ] ; ? : ,· =
另外,下面這些復(fù)合字符被用作運(yùn)算符:
++ -- == <= >= != << >>
>>> += -= *= /= &= /=
^= %= <<= >>= >>>= ‖ &&
后面還要在運(yùn)算符一節(jié)中作詳細(xì)介紹。
3. 類型
任何一個變量或表達(dá)式都有一個類型,類型決定變量可能的取值范
圍,決定對這些值允許的操作,以及這些操作的意義是什么。Java語言
中提供了內(nèi)置定義類型,程序員也可以利用類及界面(interface)機(jī)制構(gòu)造
新類型。
Java語言有兩種類型: 簡單類型和復(fù)合類型。簡單類型指那些不能
再分割的原子類型。如:整型、浮點(diǎn)型、布爾型、字符型均為簡單類型。
復(fù)合類型建立在簡單類型的基礎(chǔ)上。Java語言有三種復(fù)合類型:數(shù)組、
類及界面。在本節(jié)中,我們主要討論簡單類型及數(shù)組。
3.1 數(shù)值類型
3.1.1 整數(shù)類型
整數(shù)與C及C++中相似,但有兩點(diǎn)區(qū)別: 其一,所有的整數(shù)類型
均是獨(dú)立于機(jī)器的;其二,對某些傳統(tǒng)的定義作出改變,以反映自C問
世以來所帶來的變化,四種整數(shù)類型分別具有8位、16位、32位及64
位的寬度,并且均是有符號的(signed)。如下所示:
寬度
類型名
8
byte
16
short
32
int
64
long
一個變量的類型不會直接影響它的存儲的分配,類型僅僅決定變量
的算術(shù)性質(zhì)以及合法的取值范圍。如果把一個超出合法范圍的值賦給一
變量,那么這個值將是對合法值域取模后的值。
3.1.2 浮點(diǎn)類型
關(guān)鍵字float表示單精度(32位),而double則表示雙精度(64位),兩
個float型數(shù)運(yùn)算的結(jié)果仍是float型,若有其中之一為double型,則結(jié)
果為double型。浮點(diǎn)運(yùn)算及數(shù)據(jù)格式按IEEE754中的定義,細(xì)節(jié)問題請
參閱 “附錄A: 浮點(diǎn)”中有關(guān)浮點(diǎn)實(shí)現(xiàn)的細(xì)節(jié)。
3.1.3 字符類型
Java全部使用泛代碼字符集,因此char類型數(shù)據(jù)被定義成一個16
位的無符號整數(shù)。
3.2 布爾類型
當(dāng)一個變量的取值或為ture或為false,或者是當(dāng)一個方法的返回值為ture或false時,它?
嵌際遣級嘈偷摹A磽猓叵翟慫愕慕峁嗍遣?
爾型的。
布爾值不是數(shù)值型,因此不能用強(qiáng)制類型轉(zhuǎn)換把它們轉(zhuǎn)化成數(shù)值。
3.3 數(shù)組
數(shù)組在Java語言中屬第一類對象。由它們代替了指針運(yùn)算,所有的
對象(包括數(shù)組)都可通過標(biāo)識來引用。即使被當(dāng)作數(shù)運(yùn)算,標(biāo)識的值也
不應(yīng)被破壞。通過new運(yùn)算符可創(chuàng)建一個數(shù)組。
char s[]=new char[30];
數(shù)組第一元素的下標(biāo)為0,在聲明中指定維數(shù)是不允許的。每次都
必須顯式地用new分配數(shù)組:
int i [] =new int [3];
Java語言不支持多維數(shù)組,但是,程序員卻可以創(chuàng)建數(shù)組的數(shù)組。
int i [ ] [ ]=new int [3][4];
至少有一維要明確給定,而其它維則可在以后再確定。例如:
int i[] []=new int [3] [ ]
是一個合法的聲明。
除了在變量名及方法名后跟方括號這種C風(fēng)格的聲明之外,Java語
言允許方括號跟在數(shù)組類型之后,下面兩行是等價的:
int iarray[ ];
int [ ] iarray;
同樣地,方法聲明也一樣:
byte f(int n)[ ];
byte [ ] f(int n);
運(yùn)行時檢查下標(biāo)保證它們是合法的:
int a[ ]=new int [10];
a[5]=1;
a[1]=a[0]+a[2];
a[-1]=4; // 運(yùn)行時引發(fā)一個ArrayIndexOutOfBoundsException(數(shù)組下
標(biāo)越界)異常
a[10]=2; //運(yùn)行時引發(fā)一個ArrayIndexOutOfBoundsException(數(shù)組下
標(biāo)越界)異常
數(shù)組的大小必須使用整數(shù)表達(dá)式:
int n;
float arr[ ]=new float[n+1]
數(shù)組的長度可通過.length 查找:
int a[] []=new int [10][3];
println (a.length) //打印出10
println (a[0].length) //打印出3。
3.3.1 數(shù)組細(xì)節(jié)
我們所定義的數(shù)組都是Object類的一個子類的實(shí)例,在類的層次結(jié)
構(gòu)中有一個被稱為Array的子類,它有一個實(shí)例變量“l(fā)ength”。對每
一個基本類型,都有一個相應(yīng)的Array的子類。同理,每一個類也都有
一個相應(yīng)的Array子類存在。例如: new Thread[n] 創(chuàng)建一個Thread[ ]
的實(shí)例。如果類A是類B的超類,那么,A[]是B[]的超類,見下圖:
Object
Array A
int[] float[] A[] B
B[]
因此,可以把數(shù)組賦給一個Object變量。
Object o;
int a[]=new int [10];
o=a;
并且可通過強(qiáng)制類型轉(zhuǎn)換把object變量賦給一數(shù)組變量。
a=(int [])o;
Array類本身不能顯式地產(chǎn)生子類。
4. 類
類(class)是傳統(tǒng)面向?qū)ο缶幊棠P偷南笳鳌K鼈冎С謹(jǐn)?shù)據(jù)抽象以及實(shí)
現(xiàn)對數(shù)據(jù)的約束,在Java中,每一個新的類創(chuàng)建一個新類型。
要想得到一個新的類,程序員必須首先找到一個已有的類,新類即
在這個已有類的基礎(chǔ)上構(gòu)造,我們稱之為派生(derived)。派生出的類亦稱
為原來類的子類,而這個類我們稱為超類(super class)。
類的派生具有傳遞性: 如果B是A的子類,C是B的子類,則C
是A的子類。
一個類的直接超類以及指示這個類如何實(shí)現(xiàn)的界面(interface),在類
的聲明中,由關(guān)鍵字extends及implements標(biāo)出。如下示(黑體表示關(guān)鍵字)::
[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語言僅支持單繼承,通過一個被稱作“界面”的機(jī)制,來支持
某些在其它語言中用多繼承實(shí)現(xiàn)的機(jī)制(詳見“界面”一節(jié))。Java之所
以沒有采用C++的多繼承機(jī)制,是為了避免多繼承帶來的諸多不便,例
如:可能產(chǎn)生的二義性,編譯器更加復(fù)雜,程序難以優(yōu)化等問題。
4.1 類類型之間的強(qiáng)制轉(zhuǎn)換
Java語言支持在兩個類型之間的強(qiáng)制轉(zhuǎn)換,因為每個類即是一個新
的類型。Java支持類類型之間的強(qiáng)制轉(zhuǎn)換,如果B是A的子類,那么B
的一個實(shí)例亦可作為A的實(shí)例來使用,雖然不需要顯式的轉(zhuǎn)換,但顯式
轉(zhuǎn)換亦是合法的,這被稱作拓寬(widening)。如果A的一個實(shí)例,想當(dāng)作
B的實(shí)例使用,程序員就應(yīng)寫一個類型轉(zhuǎn)換叫作削窄(narrowing)的強(qiáng)
制。從一個類到其子類的強(qiáng)制轉(zhuǎn)
換在運(yùn)行時要作例行的檢查以確保這個對象就是其子類的一個實(shí)例
(或其子類之一)。兄弟類之間的強(qiáng)制類型轉(zhuǎn)換是一個編譯錯誤,類的強(qiáng)制轉(zhuǎn)換的語法如下?
?
(classname) ref
其中,(classname)是要轉(zhuǎn)換的目的類,而ref是被轉(zhuǎn)換的對象。
強(qiáng)制轉(zhuǎn)換僅僅影響到對象的引用,而不會影響對象本身。然而,對實(shí)例
變量的訪問卻受到對象
引用的類型的影響。一個對象從一個類型到另一類型的強(qiáng)制轉(zhuǎn)換后,
可以使同一變量名對不同的實(shí)例變量訪問。
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)是可施于對象或類上的操作,它們既可在類中,也可在
界面中聲明。但是他們卻只能在類中實(shí)現(xiàn)(Java中所有用戶定義的操作均
用方法來實(shí)現(xiàn))。
類中的方法聲明按以下方式:
[Doc_ comment] [Access Specifiers] ReturnType methodName(parameterList)
{
method body(本地的native及抽象的方法沒有體部分)
}
除構(gòu)造函數(shù)可以無返回類型外,其余的方法都有一個返回類型。如
果一個不是構(gòu)造函數(shù)的方法不返回任何值,那么它必須有一個void的返
回類型。
參數(shù)表由逗號分隔的成對的類型及參數(shù)名組成,如果方法無參數(shù),
則參數(shù)表為空。方法內(nèi)部定義的變量(局部變量)不能隱藏同一方法的其
它變量或參數(shù)。例如: 如果一個方法帶以名為i的參數(shù)實(shí)現(xiàn),且方法內(nèi)
又定義一個名為i的局部變量,則會產(chǎn)生編譯錯誤,例如:
class Rectangle {
void vertex (int i,int j) {
for (int i=0; i<=100; i++) { //出錯
…
}
}
}
方法體內(nèi)循環(huán)語句中聲明的i是一個編譯錯誤。
Java語言允許多態(tài)方法命名,即用一個名字聲明方法,這個名字已
在這個類或其超類中使用過,從而實(shí)現(xiàn)方法的覆蓋(overriding)及重載
(overloadding)。所謂覆蓋是對繼承來的方法提供另一種不同的實(shí)現(xiàn)。而
重載是指聲明一個方法,它與另外一個方法有相同的名字,但參數(shù)表不同。
注: 返回類型不能用來區(qū)別方法,即在一個類的范圍內(nèi),具有相同
的名字,相同的參數(shù)表(包括個數(shù)、位置及類型)的方法,必須返回相同
的類型。若這樣的兩個方法有不同的返回類型,將會產(chǎn)生一個編譯錯誤。
4.2.1 實(shí)例變量
實(shí)例變量(instance variables)是指那些在類內(nèi)聲明,但在方法的作用
域之外尚未被static標(biāo)記的變( 參照 “靜態(tài)方法,變量及初始化”段)。
而在一個方法的作用域之內(nèi)聲明的變量是局部變量。實(shí)例變量可以有修
飾符(見修飾符)。
實(shí)例變量可以是任何的類型,并且可以有初始值。如果一個實(shí)例變
量無初始值,它將被初始化成0。布爾型變量被初始化成flase,對象被
初始化成null。下面是一個實(shí)例變量j具有初始化值的例子:
class A{
int j =23;
……
}
4.2.2 this 和super變量
在一個非靜態(tài)方法的作用域內(nèi),this這個名字代表了當(dāng)前對象。例
如: 一個對象可能需要把自己作為參數(shù)傳給另一個對象的方法:
class MyClass {
void Method (OtherClass obj) {
…
obj.Method (this)
…
}
}
不論何時,一個方法引用它自己的實(shí)例變量及方法時,在每個引用
的前面都隱含著“this”。
如:
class Foo {
int a,b,c;
......
void myPrint ( ) {
print (a+ "\n"); // a=="this.a"
}
......
}
super變量類似于this變量。this變量實(shí)際上是對當(dāng)前對象的引用,
它的類型就是包含當(dāng)前正在處理的方法的類。而super變量則是對其超類
類型對象的引用。
第一問
: JAVA 可以將 HOMEPAGE 上的一張圖在 CLIENT 端上予以標(biāo)定
: 某一區(qū)域(偵測滑鼠所標(biāo)定的座標(biāo)區(qū)間),然後交由 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能不能將某些表格欄設(shè)為較大的單位,如:
用GridBagLayout
第三問
: 怎麼在java產(chǎn)生一個亂數(shù)呢?且限定其范圍, 謝謝告知
1.產(chǎn)生變數(shù): var1 = (int) (Math.random() * var2 );
ps. Maht.random() 產(chǎn)生 0 ~ 1 的亂數(shù)
2.設(shè)定范圍完全看變數(shù) var2 的值而定
第四問
> 我在找有關(guān)這方面的書 中英皆可
去 http://www.javasoft.com 找找吧! sun 有放出一份 java vm spec.
里頭把 java vm 的規(guī)格都講的很詳細(xì)... 連 byte code 都有... 我想
看這一份文件就足夠了吧!
第五問
>請問各位高手 在java-applet中
> 怎樣寫 才能設(shè)定show在page上 那個區(qū)塊的背景顏色呢
setBackground()這個method應(yīng)該可以達(dá)到你的要求?
第六問
: Math.random()這個method會產(chǎn)生0~1之間的float number, 當(dāng)我想要產(chǎn)生一組
: 從零到七之間的數(shù)字時 我利用這個method產(chǎn)生的值在乘以7, 我認(rèn)為這樣應(yīng)該
: 就可以了 可是結(jié)果顯示'7'這個數(shù)字都不會出現(xiàn) 不知道是什麼原因 有誰能夠
: 為我解釋嗎 感激不盡
可能是這樣:
因為 random() return 一個 double,當(dāng)你乘上 7 再轉(zhuǎn)為 int
後, 因為精確度的關(guān)系,所以不會出現(xiàn) 7. 如:6.999999999999(double)-->6(int)
第七問
> 目前想做個 Talk Program. 但是卡在於怎麼將某一個 client 端送來的訊號,
> 在 Server 收到之後 廣撥給所有的 client ....
>
> 一個 server 的 thread 與 client 端連接之後, A 送出去的字串只能馬上送給 A,
> 沒建立共享區(qū)塊, 該 client 送出的字串只能由該 client 端接收. 這當(dāng)然不對.
>
> 假如建立一個共享區(qū)塊, client A 送出的字串也只能馬上送給 A,
> 得在 client B 送出訊號之後, 才會把共享的區(qū)塊資料在回給 B,
> 但是這樣沒有做到同步更新...
>
> 應(yīng)該怎麼解決?
你用的 client 可能只有一個 thread. 解決之道是 client 用兩個 thread,
一個負(fù)責(zé) receive, 另一個負(fù)責(zé) send.
第八問
> : Java 用的 *.au 檔好像有不同的格式 (attribe, 組態(tài))...請問該用
> : 那一種的.....(小弟使用 goldwave 來編輯, 且參照 goldwave 的改
> : 法來建立 *.au, 但仍不為 Java 所接受 )
> 有些忘了... 隨便說說...
> 使用 goldwave 來做 *.au 檔, 要先把你的聲音采樣頻率設(shè)定成 8KHz,
> 然後檔案格式選 Sun/Next (*.au) 應(yīng)該就可以了. :)
^^^^^^^^^^^^^^
要選mono那一項才行
第九問
: 我是剛想學(xué) java and 制作 HOMEPAGE 的初學(xué)者,
: 而我的 os 只是普通的 dos , 我該何下手?
: 另外, 什麼是 easy html pro?
: 懇請指教!!!!
在 dos 下不行寫 java,因為 java 支援 multi-thread
你可以在 win95, WINDOWS NT, SUN ,...等環(huán)境下發(fā)展
第十問
: 請問 addNotify() 這個method是要做啥啊?
很多 class 都有這 method,功能不盡相同
可以查 APIBOOK
第十一問
> : 當(dāng)在 Applet 的程式內(nèi)去 call server 端的 CGI 時
> : 要如何將參數(shù)傳入 CGI 內(nèi)呢??
> 如果CGI是用GET,那很簡單,開一個URLConnection,
>
> 例:URL可寫成http://foo.bar.edu.tw/cgi-bin/fubar?t1=xxx&t2=yyy
> ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
> 用getCodeBase() (可能還要處理) 要給的參數(shù)
>
> 如果是POST,那可能就不能用URLConnection,而要用Socket
事實(shí)上, 不論用 GET 或 POST, 都可用 Socket (connect to port 80 --
這里假設(shè) http server 是 listen to default port 80). 就好像 web browser
一樣. 當(dāng)然, 你會用 input and output stream 來處理和 server 間的
> 這我當(dāng)然知道,但既有URLConnection卻不用,還要把傳回來的東西,像什麼
>
> Content-type, Content-length自己去掉(這是HTTP 1.0才會傳的東西)
>
> ,不是多此一舉嗎? 而且port若非80,還要自己去parse
>
> getCodeBase().toString()這個字串
我并非說不用 URLConnection, 我是指 GET 和 POST 都可以用 Socket 直接和
Server communicate.
對 GET 而言, 如你說的, 是麻煩一點(diǎn). 另外, 對你寫的用法, 我有一些修正,
不對之處, 請不吝指正.
(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().
當(dāng)然, 你的方法并不是多此一舉, 這兩者殊途同歸
: 如果CGI是用GET,那很簡單,開一個URLConnection,
: 例:URL可寫成http://foo.bar.edu.tw/cgi-bin/fubar?t1=xxx&t2=yyy
: ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
: 用getCodeBase() (可能還要處理) 要給的參數(shù)
: 如果是POST,那可能就不能用URLConnection,而要用Socket
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
其實(shí)還是可以的.......
先開一個 URL connection, 然後從這個 connection 中開一個 output stream,
將資料寫入這個 stream 就可以了 :)
補(bǔ)充一點(diǎn), 開 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() (可能還要處理) 要給的參數(shù)
> : > 如果是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目錄下竟可執(zhí)行,
: 是不是一定要這樣麻煩呢?為什麼java竟"看不到"現(xiàn)行目錄下的class呢?
: ps:我的目錄如下:
: c:\java+----bin
: +----lib----我的classpath設(shè)定在這
: +----include
: +----exercise---我在這兒執(zhí)行java,*.class,*.java也放這
: and.我將bin列入path中...
: ?
只要 Set CLASSPATH 這個環(huán)境變數(shù)并用分號分隔多個 Path
Set CLASSPATH = .... ; ...... ; ......
第二問
: 我的程式在編譯的時候出現(xiàn)了以下的訊息:
: failed to read:C:\JAVA\BIN\...\lib\javac.propeties
: Motorcycle.java:22:error message'toplevel.expected' not found
: Motorcycle Nsr;
: ^
: 因為學(xué)校沒開Java的課程,所以我是自己看書學(xué)的,對於Java的觀念還不甚清楚
: 若是下面的任一步驟有錯還希望大家多多指教....
: 我將程式碼附在底下,希望能夠得到您的寶貴意見,謝謝!
: package TrafficTools; //宣告一個名為 TrafficTools的package
: //請問在這一行一定要import任何類別嗎?
: (例如:java.applet.Applet)//
不一定 除非你須要其他類別 but default import java.lang.*
: //需要在這一行宣告介面并交給Motorcycle去implements嗎?
不一定 當(dāng)你有須要時
:
: Motorcycle Nsr; //宣告Nsr為Motorcycle類別的樣板,并繼承Motorcycle
: Nsr=new Motorcycle(); //建立Nsr物件
: Nsr.Count(); //利用Nsr物件使用 Count() 這一個method
這三行須要寫在 Motorcycle class 的 main Function 內(nèi) 因為這不是像 C++
class Motocycle {
// 一個 Java Application (not Applet) 一定要有的 function
public static void main(String Args[]) { // 程式的起點(diǎn)
Motorcycle Nsr;
Nsr = new Motorcycle();
Nsr.Count;
}
}
第三問
: 我是想將這個applet放在homepage上,那也要寫 main function嗎??
: main function好像不能放在homepage上吧....
對啊 !! application 才須要啊 !! applet 是用 init() 且 Motorcycle 要繼承
applet . 而不必 new Motorcycle Object 因為這是 Browser 做的
: 還有一點(diǎn)疑問是 Motorcycle Nsr;
: Nsr = new Motorcycle();
: Nsr. Count();
: 這三行一定要寫在Motorcycle這個類別里嗎?
: 請指教,謝謝!
Yes ...
Java 沒有 Gobal 的任何東西
第四問
> : 據(jù)說CGI程式可以用任何程式語言來寫是嗎 那麼可不可以用Java來寫呢
> : 如果可以 請問
> : 要用那個class及method來取得client傳來的資料呢 (通常從stdin)要怎麼寫
> : 而client端要如何呼叫server的Java CGI程式 例
: action="http://xxx.dom.???.tw/cgi-bin/___________">
> 再補(bǔ)充一下 是在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 直接支援執(zhí)行 Java 程式, 否則, 會有問題.
Java 程式是需由 interpreter 執(zhí)行的. 可能的一個變通方法,
就是執(zhí)行某個類似 shell 的程式 (如 *.bat, 假設(shè)在 Win95),
其中執(zhí)行 java xxx.class. 我沒有試過是否可行?
4. 不需要 symbolic link.
第五問
>: : 請問一下要如何在TextField中輸入中文?
>: : 謝謝
>: Java 字元是 Unicode,中文 big5 碼可能不行.
> 謝謝<
> 那如果我用TextField做Applet要如何讓
> Web使用者輸入中文呢?
目前所知是只能用copy & paste 輸入big5的中文 !
第六問
>如果想學(xué)java
可至段先生的站臺:http://atmwww.cm.nctu.edu.tw/~duann/javascript/script.html
第七問
介紹一個學(xué)習(xí) 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是否對應(yīng)到同一臺機(jī)器,只要不一樣
就會有SecurityException,這個訊息應(yīng)會秀在
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
: 這點(diǎn) m...沒問題,可以理解
: 好...那:
: System.out.println("...");
: System.out是變數(shù)??
: 變數(shù)里有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,當(dāng) System 這 class 被 load 到程式里時,
它會自動產(chǎn)生一個 InputStream(PrintStream) 的物件,然後配給 in(out) 這個 variable,
所以 in(out) 就可以使用 InputStream(PrintStream) 物件的 instance methods.
這樣不知清楚嗎?
第十問
: 請問已編譯好的 CGI 程式是否一定要放在 server 端的特殊目錄下???
: 如果沒有網(wǎng)路環(huán)境(單機(jī)) 該如何測試?
: PS:以 VB 撰寫
> NCSA版的httpd可以允許CGI程式以,*.cgi的方式存在并執(zhí)行而不必放在 server
> 端的特殊目錄下,我想你可以試看看,如果不行的話那我想你還是在你的
> 機(jī)器上裝一個server可能可以解決.
> 如果你成功了請告訴我如何完成的!!
單機(jī)的話 還是有辦法解決 只是一些unix上的指令用起來會有trouble
首先可架個ncsa的whttpd (不知有無95版???)
若用VB的話 我的作法是將它c(diǎn)ompiler成exe檔於c:\httpd\cgi-win目錄下
若用perl的話 就架個perl5在c:\usr\local\lib\perl下 當(dāng)然要在pif檔
及httpd.cnf檔略作修改 然後將*.pl放在c:\httpd\cgi-dos目錄下
以http://127.0.0.1/cgi-dos/*.pl 或 http://127.0.0.1/cgi-win/*.exe
就可在單機(jī)執(zhí)行cgi程式 test ok之後再upload至server中 較省錢說
或許有錯 請指教
*對 lynx 2.5 也可以單機(jī)行 CGI 程式,無需安裝 httpd
*在95或nt上, 可以自己設(shè)一個虛擬的ip
再加個站, 然後http到那個ip就可以了
第十一問
: : 也就是說要如何把: *.class ===> *.java
: : 轉(zhuǎn)變
: 目前不可能.
有限度上可能
http://web.inter.nl.net/users/H.P.van.Vliet/mocha.htm
第十二問
: 當(dāng)我在用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)的結(jié)構(gòu),有沒有哪位前輩可以教教我呢??
>
> 3)看版控制檔(*.led)的結(jié)構(gòu),也教教小弟好嗎??
*根據(jù)自己摸索可以顯示中文,但必須在*.font檔中,寫下你要的字的(*),
而font檔只要try一下就可以,*.led檔翻翻字典試看看,相信不久就能
了解.
*從舊版就一直可以的, 可以參考 http://esunbank.com.tw
*我是一個LED-SIGN的使用者
說一些我的經(jīng)驗
關(guān)於上面第一點(diǎn)
是可以的
只要去nctuccca.edu.tw /Chinese/ifcss/software/dos/banner中
用FTP抓 cbanner.exe 這一個檔案
這是一個將中文或其他文字變成以'"組成的大文字....
在WIN95中的使用辦法是
先要有ET等的中文字形程式
進(jìn)入DOS下執(zhí)行ET
再鍵入cbanner -p 進(jìn)行安裝你要的字型(如明體 隸書?.......)
回WIN95中執(zhí)行cbanner就可以看到變大的字型
按上面的字型旁的"標(biāo)示"鍵.就可以將變大的字型剪貼下來
--
再到http://www.cs.ccu.edu.tw/~sjs84/cled.html#modify中
抓修改過的class(Download)和font(cfont和cfont24)和他的demo.led
以編輯HTML的軟體編輯
可以將以剛才方式抓的變大字形加入cfont.font中
看看說明吧
第二問
> 有關(guān)action這個method不是有true&false的傳回值嗎?
> 不知道有沒有人有范例教人怎麼去應(yīng)用這傳回值...
> 也就是程式當(dāng)中如何知道action被執(zhí)行了(當(dāng)然是某個button被按了 或者是..)
> 然後在加以判斷其結(jié)果是不是你要的,不知道這段判斷的程式碼要加在哪邊才好..
>
> if(action(Event evt,Object obj) == true) {
> ...........
> }
> else
> ...........
一個程式片斷請你參考 :
public boolean action(Event evt, Object what) {
if (evt.target instanceof Button){
// 只處理 Button 所產(chǎn)生的 action, 其它的不管
....................
return true;
}
else
return false;
}
: 那請問這個action method的傳回值要怎麼去接收呢
: 因為只有當(dāng)我們按下Button的時候 action才會處理這個事件 然後在傳回
: true or false,這是我要怎麼抓住這個時機(jī)將這個傳回值加以利用呢
: 這才是我真正的問題
其實(shí)您可能想法上有些問題...
最重要的一點(diǎn), 就是我們只要把 action method 的傳回值,
看成是系統(tǒng)在用的就好了. :)
而我們是「寫」action 讓系統(tǒng) call 的人, 我們只要用
^^^^^^^^^^^^^^^^^^^^
(應(yīng)該是說 "Override" action 這個 method 來作處理..)
return true; 或 return false; 來告訴系統(tǒng)在這個 action method 中,
我們有沒有去處理該事件即可.
> 那請問這個action method的傳回值要怎麼去接收呢
> 因為只有當(dāng)我們按下Button的時候 action才會處理這個事件 然後在傳回
> true or false,這是我要怎麼抓住這個時機(jī)將這個傳回值加以利用呢
> 這才是我真正的問題
你不用去管它的 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://機(jī)器名稱/檔案名稱");
: 但執(zhí)行時他告訴我 unknown protocol : ftp
在 Java 中有一種 class 可直接作 ftp 的工作
如果記的沒錯的話, 不是在 java.net 就是在 sun.net 下
查查看 tutorial or book 就可以找到了, 在 Java! 中
還有一個 20 多行的 ftp 范例程式喔
第四問
: static這個method modifier是做什麼用的呢
: 小小問題..謝謝您的回答嘍!!! :))
嗯. 讓你的變數(shù)或方法.
成為所謂的 class variable(method)
例如 java.Math.* 的 method 都是 static 的.
就不需要先作一個 java.Math 的 instance.
可以直接以 java.Math.sin(...) 叫用.
第五問
>請問如何將婺字的string 轉(zhuǎn)為 int
String s="123";
int num;
num = Integer.parseInt(s);
第六問
> 我抓了JDBC回來 解開之後 利用JAVAC 時 卻告訴我找不到 SQL 的CLASS
> 由於我是生手 不太知道其COMPILER如何去找他須要的PACKAGE.
> 我用IMPORT JAVA.SQL 可是就是找不到??不知道是不是目錄的問題??
> 有沒有可以告訴我??謝謝!!
當(dāng)你解開後,會產(chǎn)生一個 jdbc 的目錄,
而且 SQL 的 CLASS 會放在 jdbc\classes\java\sql 內(nèi).
你就在 autoexec.bat 內(nèi)加下列的內(nèi)容:
set CLASSPATH=d:\jdbc\classes;
然後重新執(zhí)行autoexec.bat,這樣就可以了.
切記千萬不要將 sql 的目錄搬到 java\lib\java 內(nèi).
我試這個東西花了我快一個月的時間 :~~(
後來我重灌 win95 才OK...
> JDBC是有何功能?FTP上有嗎? 檔名為何?
JDBC 就是 Java DataBase Connectivity 的縮寫.
是使 Java applet (application) 有能力對關(guān)聯(lián)式資料庫做運(yùn)算.
放在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 上出現(xiàn)
> start: applet not initialized
> 這是啥原因啦!??
拜托, 你寫的程式又不是 Java Applet , 當(dāng)然沒有辦法用 appletviewer 看啊,
直接用 c:\>java MyStandAlone
就可以看到畫面上出現(xiàn)一行 Hello World! 字樣,
> 那如何才能在 appletviewer 上看到 Hello World! 呢?
> 要改那里呀?? :)
那你的 class MyStandAlone 必須 繼承 applet
而且必須按照 applet 的規(guī)矩來寫程式, 當(dāng)然也不能用
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 部份應(yīng)對這部份會有所說明才是.
JAVA Q&A第五集
客倌上菜了喲.................
> 就是如何使兩個同在一個htm中
> 的java applet能互傳數(shù)值....
目前光用 Java 是沒有辦法做到這點(diǎn)的... 每個 applet 都是彼此獨(dú)
立的, 兩者間想要溝通你得繞一大圈... 比如在你的 Web Site 寫個
Server來幫助這兩個 applet 溝通, 或是xxxx.... 等等.
不過你可以去 JavaSoft 的 homepage 看看, 在一篇評論 ActiveX
的文章中就題到這一點(diǎn)... 你的這個問題用 ActiveX 的解決方案很
容易就可以做到, 不過這方面我不熟, 你自己去找找相關(guān)資料吧!
Netscape 提了一個 LiveConnect 架構(gòu)
讓 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還是可以彼此溝通的
@應(yīng)該有很多方法:如使用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程式設(shè)計入門(陳建榮,王子裕,林湘茗編著)....
在第五章 APPLET 中有二個 APPLET同時溝通的范例程式....不妨去看看吧..
P5_3.HTML >>>>>>>>>>>>>>>大約在5-20頁
: 請問目前 java是否已有可 show bmp image 的 class ? 或是各位網(wǎng)
: 友有這方面經(jīng)驗者,可否指點(diǎn)一二 ?
: Thanks in advance ... :)
據(jù)我所知, Java 只直接支援 gif & jpeg 格式 image.
: 請問有那位網(wǎng)友知道"專家系統(tǒng)"??
: 弟想了解,可否介紹幾本書?
介紹你一本專家系統(tǒng)的書
全欣資訊 專家系統(tǒng)-方法應(yīng)用與實(shí)作 中文版的 $390(附磁片)
作者 郭耀煌(為成大資研所的老師)
內(nèi)容滿簡單的.主要為概念的介紹.還有一些經(jīng)典的范例哦!
至於有關(guān)的程式語言就介紹的較少
不過這書仍舊適合初學(xué)者自學(xué)的
中文的書都很久了, 都是七十年代的古書, 松崗去年有出一本新書!!
書名叫做"Prolog與專家系統(tǒng)", 名字大概是這樣!!
目前全世界No. 1 的專家系統(tǒng)G2 Real Time Expert System. 由本公司代理
你想要了解專家系統(tǒng)可以連絡(luò)本公司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 幫你
轉(zhuǎn)...
socket 的用法, 跟 UNIX 的 socket 大同小異吧? 看一看有關(guān) java.net.*
的 api 應(yīng)該就可以了
: 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
大概是它找不到j(luò)dbcodbc.dll吧? 這個檔在\jdbc-odbc\classes\jdbc\odbc\
下面,把它拷到路徑中任一目錄下試試...
: 我剛用Visual J++,
: 於是寫了一個所有教科書都有的小程式--Hello.World!
: compile和build時都過了!
: 執(zhí)行時卻出現(xiàn)java.lang.UnsatisfiedLinkError
: 不知到是那出了問題,是有那里沒設(shè)定嗎?還是沒裝MS IE3.0的關(guān)系呢?
: 請各位高手不吝指教!!
: 以下是程式內(nèi)容:
: class Hello
^^^^^^^^^^^^^^^^^^^^:
試看看 class Hello extends Applet
: {
: public static void main ( String args[] )
: {
: System.out.println("Hello.World!");
: }
: }
另解
> class Hello {
^ 前面加上 public ... 整個程式的主 class 必須要 public , 才可以被執(zhí)行
: > class Hello {
: ^ 前面加上 public ... 整個程式的主 class 必須要 public , 才可以被執(zhí)行
: > public static void main ( String args[] ){
: > System.out.println("Hello.World!");
: > }
: > }
不一定吧? 據(jù)我所知, 只要 main() 是 public 就可以了.
請指教.
對不起!我是原先的post者,首先感謝大家的不吝指教!!
原先的程式我用JDK編譯執(zhí)行過,可以正確執(zhí)行!
所以程式本身并無問題,所以問題應(yīng)是出在Visual J++上,
而各位提供的各種方法我都試過了,都不行耶!
因此希望大家?guī)臀蚁胂胧欠裨赩isual J++出了什麼問題!謝謝!!!....
: 在下初學(xué), 想請問前輩有沒有能夠幫忙轉(zhuǎn)中文字給LED的程式呢
試試小弟寫的程式.
1. 你需要有倚天的字型檔, 修改一下路徑, compile
就可以用了.
2. 要用 24x24 字型也可以, 程式要稍做修改, 需要請通知我.
3. 執(zhí)行後把輸出導(dǎo)相到一個檔案, 前面三行加上'字高' '字寬'
'字?jǐn)?shù)' 的參數(shù)即可當(dāng)led 的 font file.
有任何疑問歡迎與我聯(lián)絡(luò).
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("請輸入要轉(zhuǎn)換的文字:");
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);
}
: 現(xiàn)在要用 java 做到在 client 端 run 一個 applet
: 同時我在 server 端也執(zhí)行一個 java 的 application
: 用來接收 client 端所送回的 message...
: 就有點(diǎn)像 cgi 程式 但我還需要做一些其它的判斷
: 所以一定要用 java 來寫......
: 請問 這要如何處理??
兩方都使用socket 就可以做 client-server了, 看看java.net 里面的一些class
: 不知道java可否在Server端存取檔案呢
: 又 聽說Java可以扮演CGI的角色
: (不知道這樣的觀念對不對)
: 那為何網(wǎng)上的applet大多只有在動畫上打轉(zhuǎn)呢
有好幾種方法可在java 中讓applet 存取server 端檔案,一是用socket
在server上有一接收程式來執(zhí)行applet 所要的動作(當(dāng)然就可以包括檔案存取了)
另一是用URL 這個class 也可以讀取server 上的檔案(至於存檔我則沒用過,所以
不知道可不可以).
: 就是在圖形重疊時不畫不要的顏色
: 用g.drawImage會將整個四方形都畫出來
: 如何能做到SPRITE呢
只能指定 drawImage 時候的透明色要用那種顏色替代 沒辦法畫出重疊
時下面那張圖案.... 至少我看 API reference 是這樣說的....
用LVIEW PRO一下就好了......何必找麻煩......:)
@@@@@ 首先要設(shè)法讓你的圖形中要成為透明色的部份變成統(tǒng)一的某一種顏色,
我的方法是先在Lview的Option的選單下設(shè)定Background color,
要先選擇要設(shè)為透明的底色, 再選擇Mark selection using的選項
看看是否是設(shè)定到的背景顏色是否正確,
最後以GIF 89a的格式存檔
我也算是初學(xué)者,
前一陣子試過將兩張圖片疊在一起,
并讓前景的不規(guī)則圖形能在復(fù)雜的背景下移動:
Image foreground,background;
......
Graphics gr;
gr=this.getGraphics();
gr.drawImage(background,x1,y1,null);
gr.drawImage(foreground,x2,y2,null);
其中foreground就必須經(jīng)過Lview的處理
至於為什麼在drawImage第四個參數(shù) ImageObserver 要設(shè)為 null 我就不知了
> 我使用 JAVAH.EXE 程式去將 某個 .CLASS 檔案產(chǎn)生 .H 檔時發(fā)生問題,
> 我執(zhí)行下列命令:
> F:\JAVA\BIN\JAVAH.EXE Simple (在目錄下有 Simple.class檔案)
> 它給我的 error message 是 "Simple: no such class"
> 可是在目錄下確實(shí)有 Simple.class 檔案,
> 我的 CLASSPATH= .;F:\JAVA\LIB\CLASSES
> 希望各位先進(jìn)幫幫忙, 謝謝 !!!
你肯定大小正確嗎???
還有,好像要打F:\JAVA\BIN\JAVAH.EXE Simple.class 才行
不要想得她太聰明.
應(yīng)該不是打全名吧 ? 若打全名即 simple.class, javah會找 Simple目錄下的
class 檔案, 不過 error message 還是 "no such class"
Cafe 1.2里頭附的javah有此問題,改用JDK 1.02的就行了
> 我目前是用 SUN JDK 1.0.2, 但結(jié)果還是一樣
我知道原因了,你沒設(shè)classpath這個變數(shù)
通常是如下設(shè)定
set clasapath=c:\java\lib\classes.zip;.
^^^^^^^你的JDK所在目錄
cafe里的javah應(yīng)沒問題,也是忘記設(shè)classpath所致
>依照你的方法一試, 確實(shí)可以了謝謝你.
>可是我原來所設(shè)定的 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)
==============================================================
它的意思大概是若設(shè)定 classpath=.; 的話, javah
似乎對於第一個所設(shè)定的path (也就是 ".") 視而不見. 因此在 "." 再插入
其它目錄來騙過它. 或是依照你所寫的, 將 "." 擺在最後.
我有做一個實(shí)驗, 有關(guān)上述 path 問題如下:
執(zhí)行命令: javah HelloWorld
(1) 設(shè)定 CLASSPATH=.;c:\java\lib\classes.zip
錯誤 ==> "HelloWorld: no such class"
(2) 設(shè)定 CLASSPATH=C:\java\lib\classes.zip;.
OK
(3) 設(shè)定 CLASSPATH=.;.;c:\java\lib\classes.zip
OK
(4) 設(shè)定 CLASSPATH=.;;c:\java\lib\classes.zip
OK
(5) 設(shè)定 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
: 對不起, 我是原發(fā)信者, 我沒有把問題說清楚, 我的目的是要抓 applet
: instance 的 name, 而不是某些用 傳進(jìn)來的
我記得Java tutorial里講得很清楚,
用java.applet.getApplet(String name)即可
不是用getParameter()
請問cafe的一般版和完整版有什麼差別?
: > 如標(biāo)題所詢問 我想知道到那里可取得其操作手冊 最近剛由松崗買了一套回來
: > Install了老半天(差點(diǎn)讓我發(fā)火耶 近來才發(fā)現(xiàn) 原來Install能耗時這樣久 )
: > 可是無操作手冊可參考耶
NCTUCCCA/vendor/symentec/doc/cafeguid.zip
我用過!
不過resource好像不能用的樣子呢?
我在應(yīng)用電腦展里有去聽symantec caf'e的說明會
resource在雙位元版本的os下有問題..
過一陣子才會解決吧!!
> 有些Page中的applet,
> 我選了之後它又自己開了一個新window,
> 就執(zhí)行在新的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, 有點(diǎn)心得分享
使用native method的步驟請看Sun的java tutorial部份
這里要說的是tutorial里沒講清楚,也是最關(guān)鍵的一步,就是
制作出native method的.DLL(Windows 95), 我在網(wǎng)路上看到
的作法如下, 第一要有MSVC (2.1版以後,我是用4.0), 第二要有
Cafe,因為link時須要javai.lib, 但JDK附的不是MSVC看得懂的coff
格式, 而Cafe里有附j(luò)avai.lib_coff, 我不知Visual J++里是否有..
編譯的命令列參數(shù)如下, 以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
參數(shù)-Fe表示輸出的執(zhí)行檔名稱(為Hello.dll)
/I為include files path
/MD表示與MSVCRT.LIB link
^^^^^^(MSVC Run-time Library)
/LD表示制作.DLL
完畢後即產(chǎn)生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 資料結(jié)構(gòu)
> 該怎麼用呢? 可不可以自己來殺掉不必要的 Thread 而不要由系統(tǒng)來殺呢 ?
抓某thread的資料,用toString()或getName()
要?dú)⒛硉hread, 用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, 不過最好別亂殺,有些
//是系統(tǒng)(Java VM)的thread
詳細(xì)用法請參考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...
: 用途是隨意圖畫....
: 可是我不知道如何設(shè)定線條的寬度...
: awt.Graphics有提供這種 member function嗎??
沒有,如果真的要用的話,只好要 drawLine() 多畫幾次吧!!!!!
Java語言的源程序代碼由一個或多個編譯單元(compilation unit)組
成,每個編譯單元只能包含下列內(nèi)容(空格和注釋除外):
* 一個程序包語句(package statement )
* 引入語句(import statements)
* 類的聲明(class declarations)
* 界面聲明(interface declarations)
每個Java的編譯單元可包含多個類或界面,但是每個編譯單元卻至
多有一個類或者界面是公共的。
Java 的源程序代碼被編譯之后,便產(chǎn)生了Java字節(jié)代碼(bytecode)。
Java的字節(jié)代碼由一些不依賴于機(jī)器的指令組成,這些指令能被Java的
運(yùn)行系統(tǒng)(runtime system)有效地解釋。Java的運(yùn)行系統(tǒng)工作起來如同一
臺虛擬機(jī)。
在當(dāng)前的Java實(shí)現(xiàn)中,每個編譯單元就是一個以.java為后綴的文件。
每個編譯單元有若干個類,編譯后,每個類生成一個.class文件。.class
文件是Java虛機(jī)器碼?
2. 詞法問題
在編譯的過程中,Java源程序代碼中的字符被劃分為一系列的標(biāo)記
(token)。Java編譯器可以識別五種標(biāo)記: 標(biāo)識符、關(guān)鍵字、字面量、運(yùn)
算符以及特殊分隔符。注釋以及諸如空格、制表符、換行符等字符 ,都
不屬于標(biāo)識之列,但他們卻常被用來分隔標(biāo)記。
Java程序的編寫采用泛代碼Unicode字符集,若采用其它的字符集,
則需在編譯前轉(zhuǎn)換成Unicode。
2.1 注釋
Java語言提供了3種形式的注釋:
//text 從//到本行結(jié)束的所有字符均作為注釋而被編譯器忽略。
/* text */ 從/*到*/ 間的所有字符會被編譯器忽略。
/** text */
當(dāng)這類注釋出現(xiàn)在任何聲明之前時將會作特殊處理,它們不能再用
在代碼的任何地方。這類注釋意味著被括起來的正文部分,應(yīng)該作為聲
明項目的描述,而被包含在自動產(chǎn)生的文檔中。
2.2 標(biāo)識符
標(biāo)識符的首字符必須是一個字母,下劃線("_")或美元符號("$")。 后
面的字符也可是數(shù)字0-9。 Java使用泛代碼字符集,為了便于識別好一
合法標(biāo)識符,下面列出它的“字母”:
* 大寫字母“A”~“Z”
* 小寫字母“a”~“z”
* 泛代碼(Unicode)中所有字符編碼在十六進(jìn)制數(shù)00C0之前的字
符。標(biāo)識符中,首字母后的字符可以是任意的。當(dāng)然,Unicode區(qū)段中
那些被保留作特殊字符的除外。
由此,“garton”及“MjΦlner”都是合法標(biāo)識符,但是,包括
諸如“π”的字符串卻不是合法的。
為了取得更多的有關(guān)泛代碼標(biāo)準(zhǔn)的信息,請參閱“The Unicode
Standard”,“World Wide Character Encoding version 1.0,volumes 1 &
2”,Unicode公司的FTP地址是unicode.org。
2.3 關(guān)鍵字
下面的標(biāo)識符被保留用作關(guān)鍵字,他們不能作任何其它的用途。
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
其中,加*標(biāo)記后是被保留但當(dāng)前卻未使用的。
2.4 字面量
字面量(literal)是某些類型值的基本表述,這些類型包括整型,浮點(diǎn)
型,布爾量,字符及字符串。
2.4.1 整型字面量
整數(shù)可有三種表示形式: 十進(jìn)制,八進(jìn)制和十六進(jìn)制。一個十進(jìn)制
整型字面量由一系列的數(shù)字組成,但它的第一個數(shù)字不能是0(有時十進(jìn)
制數(shù)字也可象下面講的那樣加后綴)。整數(shù)也可表達(dá)成八進(jìn)制或十六進(jìn)制
形式。以0開頭的整型字面量,意味著它是一個十六進(jìn)制的。十六進(jìn)制
整數(shù)可以包括數(shù)字0-9以及字母a-f及A-F。八進(jìn)制整數(shù)中則只能是出現(xiàn)
數(shù)字0-7。在超過32位所能表示的范圍之前,整型字面量的類型即為int,
否則為long型。一個整型字面量可通過加后綴L或l而強(qiáng)迫成long型。
下面的均為合法的整型字面量。
2 2L 0777
2.4.2 浮點(diǎn)字面量
一個浮點(diǎn)字面量可包括以下部分: 一個十進(jìn)制整數(shù),一個小數(shù)點(diǎn)“.”,
小數(shù)部分(另外一個十進(jìn)制整數(shù)),指數(shù)部分,一個類型后綴。指數(shù)部分
是一個e或E后跟一個整數(shù)。浮點(diǎn)字面量至少包含有一個數(shù)字,外加或
者一個小數(shù)點(diǎn)或者一個e(或E),下面舉一些浮點(diǎn)字面量的例子:
3.1415 3.1E12 .1e12 2E12
就象在后面描述的那樣,Java語言有兩種浮點(diǎn)類型: float 及
double,用戶可按以下寫法區(qū)分:
2.0d或2.0D double 型
2.0f或2.0F或2.0 float型
2.4.3 布爾字面量
布爾(boolean)字面量有兩個值: true及false。
2.4.4 字符字面量
字符字面量是一個由單引號括起的字符(或者是由一組字符來表述
一個字符)。字符屬于char類型,并且均從泛代碼字符集中得來。而下面
列出的轉(zhuǎn)義序列則用來描述一些非圖形字符,它們以反斜杠“\”開始以
作轉(zhuǎn)義用。
續(xù)行符頭
換行 NL(LF) \n
垂直制表符 HT \t
退格 BS \b
回車 CR \r
走紙換頁 FF \f
反斜杠 \ \\
單引號 ' \'
雙引號 " \"
八進(jìn)制數(shù) 0ddd \ddd
十六進(jìn)制數(shù) 0xdd \xdd
泛代碼字符 0xdddd \udddd
2.4.5 串字面量
串字面量是雙引號引起的零個或多個字符的序列。每個串字面量被
看作是一個串對象,而并非是一個字符的數(shù)組,例如“abc”創(chuàng)建了一
個新的串類的實(shí)例。下面的都是合法的串字面量:
" " \\空串
"\" " \\只包含一個雙引號的串
"This is a string"
"This is a \
two-line string"
2.5 運(yùn)算符及特殊分隔符
下面這些字符在Java源程序中作運(yùn)算符或分隔符用:
+ — ! % ^ & * | ~ / > <
( ) { } [ ] ; ? : ,· =
另外,下面這些復(fù)合字符被用作運(yùn)算符:
++ -- == <= >= != << >>
>>> += -= *= /= &= /=
^= %= <<= >>= >>>= ‖ &&
后面還要在運(yùn)算符一節(jié)中作詳細(xì)介紹。
3. 類型
任何一個變量或表達(dá)式都有一個類型,類型決定變量可能的取值范
圍,決定對這些值允許的操作,以及這些操作的意義是什么。Java語言
中提供了內(nèi)置定義類型,程序員也可以利用類及界面(interface)機(jī)制構(gòu)造
新類型。
Java語言有兩種類型: 簡單類型和復(fù)合類型。簡單類型指那些不能
再分割的原子類型。如:整型、浮點(diǎn)型、布爾型、字符型均為簡單類型。
復(fù)合類型建立在簡單類型的基礎(chǔ)上。Java語言有三種復(fù)合類型:數(shù)組、
類及界面。在本節(jié)中,我們主要討論簡單類型及數(shù)組。
3.1 數(shù)值類型
3.1.1 整數(shù)類型
整數(shù)與C及C++中相似,但有兩點(diǎn)區(qū)別: 其一,所有的整數(shù)類型
均是獨(dú)立于機(jī)器的;其二,對某些傳統(tǒng)的定義作出改變,以反映自C問
世以來所帶來的變化,四種整數(shù)類型分別具有8位、16位、32位及64
位的寬度,并且均是有符號的(signed)。如下所示:
寬度
類型名
8
byte
16
short
32
int
64
long
一個變量的類型不會直接影響它的存儲的分配,類型僅僅決定變量
的算術(shù)性質(zhì)以及合法的取值范圍。如果把一個超出合法范圍的值賦給一
變量,那么這個值將是對合法值域取模后的值。
3.1.2 浮點(diǎn)類型
關(guān)鍵字float表示單精度(32位),而double則表示雙精度(64位),兩
個float型數(shù)運(yùn)算的結(jié)果仍是float型,若有其中之一為double型,則結(jié)
果為double型。浮點(diǎn)運(yùn)算及數(shù)據(jù)格式按IEEE754中的定義,細(xì)節(jié)問題請
參閱 “附錄A: 浮點(diǎn)”中有關(guān)浮點(diǎn)實(shí)現(xiàn)的細(xì)節(jié)。
3.1.3 字符類型
Java全部使用泛代碼字符集,因此char類型數(shù)據(jù)被定義成一個16
位的無符號整數(shù)。
3.2 布爾類型
當(dāng)一個變量的取值或為ture或為false,或者是當(dāng)一個方法的返回值為ture或false時,它?
嵌際遣級嘈偷摹A磽猓叵翟慫愕慕峁嗍遣?
爾型的。
布爾值不是數(shù)值型,因此不能用強(qiáng)制類型轉(zhuǎn)換把它們轉(zhuǎn)化成數(shù)值。
3.3 數(shù)組
數(shù)組在Java語言中屬第一類對象。由它們代替了指針運(yùn)算,所有的
對象(包括數(shù)組)都可通過標(biāo)識來引用。即使被當(dāng)作數(shù)運(yùn)算,標(biāo)識的值也
不應(yīng)被破壞。通過new運(yùn)算符可創(chuàng)建一個數(shù)組。
char s[]=new char[30];
數(shù)組第一元素的下標(biāo)為0,在聲明中指定維數(shù)是不允許的。每次都
必須顯式地用new分配數(shù)組:
int i [] =new int [3];
Java語言不支持多維數(shù)組,但是,程序員卻可以創(chuàng)建數(shù)組的數(shù)組。
int i [ ] [ ]=new int [3][4];
至少有一維要明確給定,而其它維則可在以后再確定。例如:
int i[] []=new int [3] [ ]
是一個合法的聲明。
除了在變量名及方法名后跟方括號這種C風(fēng)格的聲明之外,Java語
言允許方括號跟在數(shù)組類型之后,下面兩行是等價的:
int iarray[ ];
int [ ] iarray;
同樣地,方法聲明也一樣:
byte f(int n)[ ];
byte [ ] f(int n);
運(yùn)行時檢查下標(biāo)保證它們是合法的:
int a[ ]=new int [10];
a[5]=1;
a[1]=a[0]+a[2];
a[-1]=4; // 運(yùn)行時引發(fā)一個ArrayIndexOutOfBoundsException(數(shù)組下
標(biāo)越界)異常
a[10]=2; //運(yùn)行時引發(fā)一個ArrayIndexOutOfBoundsException(數(shù)組下
標(biāo)越界)異常
數(shù)組的大小必須使用整數(shù)表達(dá)式:
int n;
float arr[ ]=new float[n+1]
數(shù)組的長度可通過.length 查找:
int a[] []=new int [10][3];
println (a.length) //打印出10
println (a[0].length) //打印出3。
3.3.1 數(shù)組細(xì)節(jié)
我們所定義的數(shù)組都是Object類的一個子類的實(shí)例,在類的層次結(jié)
構(gòu)中有一個被稱為Array的子類,它有一個實(shí)例變量“l(fā)ength”。對每
一個基本類型,都有一個相應(yīng)的Array的子類。同理,每一個類也都有
一個相應(yīng)的Array子類存在。例如: new Thread[n] 創(chuàng)建一個Thread[ ]
的實(shí)例。如果類A是類B的超類,那么,A[]是B[]的超類,見下圖:
Object
Array A
int[] float[] A[] B
B[]
因此,可以把數(shù)組賦給一個Object變量。
Object o;
int a[]=new int [10];
o=a;
并且可通過強(qiáng)制類型轉(zhuǎn)換把object變量賦給一數(shù)組變量。
a=(int [])o;
Array類本身不能顯式地產(chǎn)生子類。
4. 類
類(class)是傳統(tǒng)面向?qū)ο缶幊棠P偷南笳鳌K鼈冎С謹(jǐn)?shù)據(jù)抽象以及實(shí)
現(xiàn)對數(shù)據(jù)的約束,在Java中,每一個新的類創(chuàng)建一個新類型。
要想得到一個新的類,程序員必須首先找到一個已有的類,新類即
在這個已有類的基礎(chǔ)上構(gòu)造,我們稱之為派生(derived)。派生出的類亦稱
為原來類的子類,而這個類我們稱為超類(super class)。
類的派生具有傳遞性: 如果B是A的子類,C是B的子類,則C
是A的子類。
一個類的直接超類以及指示這個類如何實(shí)現(xiàn)的界面(interface),在類
的聲明中,由關(guān)鍵字extends及implements標(biāo)出。如下示(黑體表示關(guān)鍵字)::
[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語言僅支持單繼承,通過一個被稱作“界面”的機(jī)制,來支持
某些在其它語言中用多繼承實(shí)現(xiàn)的機(jī)制(詳見“界面”一節(jié))。Java之所
以沒有采用C++的多繼承機(jī)制,是為了避免多繼承帶來的諸多不便,例
如:可能產(chǎn)生的二義性,編譯器更加復(fù)雜,程序難以優(yōu)化等問題。
4.1 類類型之間的強(qiáng)制轉(zhuǎn)換
Java語言支持在兩個類型之間的強(qiáng)制轉(zhuǎn)換,因為每個類即是一個新
的類型。Java支持類類型之間的強(qiáng)制轉(zhuǎn)換,如果B是A的子類,那么B
的一個實(shí)例亦可作為A的實(shí)例來使用,雖然不需要顯式的轉(zhuǎn)換,但顯式
轉(zhuǎn)換亦是合法的,這被稱作拓寬(widening)。如果A的一個實(shí)例,想當(dāng)作
B的實(shí)例使用,程序員就應(yīng)寫一個類型轉(zhuǎn)換叫作削窄(narrowing)的強(qiáng)
制。從一個類到其子類的強(qiáng)制轉(zhuǎn)
換在運(yùn)行時要作例行的檢查以確保這個對象就是其子類的一個實(shí)例
(或其子類之一)。兄弟類之間的強(qiáng)制類型轉(zhuǎn)換是一個編譯錯誤,類的強(qiáng)制轉(zhuǎn)換的語法如下?
?
(classname) ref
其中,(classname)是要轉(zhuǎn)換的目的類,而ref是被轉(zhuǎn)換的對象。
強(qiáng)制轉(zhuǎn)換僅僅影響到對象的引用,而不會影響對象本身。然而,對實(shí)例
變量的訪問卻受到對象
引用的類型的影響。一個對象從一個類型到另一類型的強(qiáng)制轉(zhuǎn)換后,
可以使同一變量名對不同的實(shí)例變量訪問。
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)是可施于對象或類上的操作,它們既可在類中,也可在
界面中聲明。但是他們卻只能在類中實(shí)現(xiàn)(Java中所有用戶定義的操作均
用方法來實(shí)現(xiàn))。
類中的方法聲明按以下方式:
[Doc_ comment] [Access Specifiers] ReturnType methodName(parameterList)
{
method body(本地的native及抽象的方法沒有體部分)
}
除構(gòu)造函數(shù)可以無返回類型外,其余的方法都有一個返回類型。如
果一個不是構(gòu)造函數(shù)的方法不返回任何值,那么它必須有一個void的返
回類型。
參數(shù)表由逗號分隔的成對的類型及參數(shù)名組成,如果方法無參數(shù),
則參數(shù)表為空。方法內(nèi)部定義的變量(局部變量)不能隱藏同一方法的其
它變量或參數(shù)。例如: 如果一個方法帶以名為i的參數(shù)實(shí)現(xiàn),且方法內(nèi)
又定義一個名為i的局部變量,則會產(chǎn)生編譯錯誤,例如:
class Rectangle {
void vertex (int i,int j) {
for (int i=0; i<=100; i++) { //出錯
…
}
}
}
方法體內(nèi)循環(huán)語句中聲明的i是一個編譯錯誤。
Java語言允許多態(tài)方法命名,即用一個名字聲明方法,這個名字已
在這個類或其超類中使用過,從而實(shí)現(xiàn)方法的覆蓋(overriding)及重載
(overloadding)。所謂覆蓋是對繼承來的方法提供另一種不同的實(shí)現(xiàn)。而
重載是指聲明一個方法,它與另外一個方法有相同的名字,但參數(shù)表不同。
注: 返回類型不能用來區(qū)別方法,即在一個類的范圍內(nèi),具有相同
的名字,相同的參數(shù)表(包括個數(shù)、位置及類型)的方法,必須返回相同
的類型。若這樣的兩個方法有不同的返回類型,將會產(chǎn)生一個編譯錯誤。
4.2.1 實(shí)例變量
實(shí)例變量(instance variables)是指那些在類內(nèi)聲明,但在方法的作用
域之外尚未被static標(biāo)記的變( 參照 “靜態(tài)方法,變量及初始化”段)。
而在一個方法的作用域之內(nèi)聲明的變量是局部變量。實(shí)例變量可以有修
飾符(見修飾符)。
實(shí)例變量可以是任何的類型,并且可以有初始值。如果一個實(shí)例變
量無初始值,它將被初始化成0。布爾型變量被初始化成flase,對象被
初始化成null。下面是一個實(shí)例變量j具有初始化值的例子:
class A{
int j =23;
……
}
4.2.2 this 和super變量
在一個非靜態(tài)方法的作用域內(nèi),this這個名字代表了當(dāng)前對象。例
如: 一個對象可能需要把自己作為參數(shù)傳給另一個對象的方法:
class MyClass {
void Method (OtherClass obj) {
…
obj.Method (this)
…
}
}
不論何時,一個方法引用它自己的實(shí)例變量及方法時,在每個引用
的前面都隱含著“this”。
如:
class Foo {
int a,b,c;
......
void myPrint ( ) {
print (a+ "\n"); // a=="this.a"
}
......
}
super變量類似于this變量。this變量實(shí)際上是對當(dāng)前對象的引用,
它的類型就是包含當(dāng)前正在處理的方法的類。而super變量則是對其超類
類型對象的引用。
第一問
: JAVA 可以將 HOMEPAGE 上的一張圖在 CLIENT 端上予以標(biāo)定
: 某一區(qū)域(偵測滑鼠所標(biāo)定的座標(biāo)區(qū)間),然後交由 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能不能將某些表格欄設(shè)為較大的單位,如:
用GridBagLayout
第三問
: 怎麼在java產(chǎn)生一個亂數(shù)呢?且限定其范圍, 謝謝告知
1.產(chǎn)生變數(shù): var1 = (int) (Math.random() * var2 );
ps. Maht.random() 產(chǎn)生 0 ~ 1 的亂數(shù)
2.設(shè)定范圍完全看變數(shù) var2 的值而定
第四問
> 我在找有關(guān)這方面的書 中英皆可
去 http://www.javasoft.com 找找吧! sun 有放出一份 java vm spec.
里頭把 java vm 的規(guī)格都講的很詳細(xì)... 連 byte code 都有... 我想
看這一份文件就足夠了吧!
第五問
>請問各位高手 在java-applet中
> 怎樣寫 才能設(shè)定show在page上 那個區(qū)塊的背景顏色呢
setBackground()這個method應(yīng)該可以達(dá)到你的要求?
第六問
: Math.random()這個method會產(chǎn)生0~1之間的float number, 當(dāng)我想要產(chǎn)生一組
: 從零到七之間的數(shù)字時 我利用這個method產(chǎn)生的值在乘以7, 我認(rèn)為這樣應(yīng)該
: 就可以了 可是結(jié)果顯示'7'這個數(shù)字都不會出現(xiàn) 不知道是什麼原因 有誰能夠
: 為我解釋嗎 感激不盡
可能是這樣:
因為 random() return 一個 double,當(dāng)你乘上 7 再轉(zhuǎn)為 int
後, 因為精確度的關(guān)系,所以不會出現(xiàn) 7. 如:6.999999999999(double)-->6(int)
第七問
> 目前想做個 Talk Program. 但是卡在於怎麼將某一個 client 端送來的訊號,
> 在 Server 收到之後 廣撥給所有的 client ....
>
> 一個 server 的 thread 與 client 端連接之後, A 送出去的字串只能馬上送給 A,
> 沒建立共享區(qū)塊, 該 client 送出的字串只能由該 client 端接收. 這當(dāng)然不對.
>
> 假如建立一個共享區(qū)塊, client A 送出的字串也只能馬上送給 A,
> 得在 client B 送出訊號之後, 才會把共享的區(qū)塊資料在回給 B,
> 但是這樣沒有做到同步更新...
>
> 應(yīng)該怎麼解決?
你用的 client 可能只有一個 thread. 解決之道是 client 用兩個 thread,
一個負(fù)責(zé) receive, 另一個負(fù)責(zé) send.
第八問
> : Java 用的 *.au 檔好像有不同的格式 (attribe, 組態(tài))...請問該用
> : 那一種的.....(小弟使用 goldwave 來編輯, 且參照 goldwave 的改
> : 法來建立 *.au, 但仍不為 Java 所接受 )
> 有些忘了... 隨便說說...
> 使用 goldwave 來做 *.au 檔, 要先把你的聲音采樣頻率設(shè)定成 8KHz,
> 然後檔案格式選 Sun/Next (*.au) 應(yīng)該就可以了. :)
^^^^^^^^^^^^^^
要選mono那一項才行
第九問
: 我是剛想學(xué) java and 制作 HOMEPAGE 的初學(xué)者,
: 而我的 os 只是普通的 dos , 我該何下手?
: 另外, 什麼是 easy html pro?
: 懇請指教!!!!
在 dos 下不行寫 java,因為 java 支援 multi-thread
你可以在 win95, WINDOWS NT, SUN ,...等環(huán)境下發(fā)展
第十問
: 請問 addNotify() 這個method是要做啥啊?
很多 class 都有這 method,功能不盡相同
可以查 APIBOOK
第十一問
> : 當(dāng)在 Applet 的程式內(nèi)去 call server 端的 CGI 時
> : 要如何將參數(shù)傳入 CGI 內(nèi)呢??
> 如果CGI是用GET,那很簡單,開一個URLConnection,
>
> 例:URL可寫成http://foo.bar.edu.tw/cgi-bin/fubar?t1=xxx&t2=yyy
> ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
> 用getCodeBase() (可能還要處理) 要給的參數(shù)
>
> 如果是POST,那可能就不能用URLConnection,而要用Socket
事實(shí)上, 不論用 GET 或 POST, 都可用 Socket (connect to port 80 --
這里假設(shè) http server 是 listen to default port 80). 就好像 web browser
一樣. 當(dāng)然, 你會用 input and output stream 來處理和 server 間的
> 這我當(dāng)然知道,但既有URLConnection卻不用,還要把傳回來的東西,像什麼
>
> Content-type, Content-length自己去掉(這是HTTP 1.0才會傳的東西)
>
> ,不是多此一舉嗎? 而且port若非80,還要自己去parse
>
> getCodeBase().toString()這個字串
我并非說不用 URLConnection, 我是指 GET 和 POST 都可以用 Socket 直接和
Server communicate.
對 GET 而言, 如你說的, 是麻煩一點(diǎn). 另外, 對你寫的用法, 我有一些修正,
不對之處, 請不吝指正.
(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().
當(dāng)然, 你的方法并不是多此一舉, 這兩者殊途同歸
: 如果CGI是用GET,那很簡單,開一個URLConnection,
: 例:URL可寫成http://foo.bar.edu.tw/cgi-bin/fubar?t1=xxx&t2=yyy
: ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
: 用getCodeBase() (可能還要處理) 要給的參數(shù)
: 如果是POST,那可能就不能用URLConnection,而要用Socket
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
其實(shí)還是可以的.......
先開一個 URL connection, 然後從這個 connection 中開一個 output stream,
將資料寫入這個 stream 就可以了 :)
補(bǔ)充一點(diǎn), 開 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() (可能還要處理) 要給的參數(shù)
> : > 如果是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目錄下竟可執(zhí)行,
: 是不是一定要這樣麻煩呢?為什麼java竟"看不到"現(xiàn)行目錄下的class呢?
: ps:我的目錄如下:
: c:\java+----bin
: +----lib----我的classpath設(shè)定在這
: +----include
: +----exercise---我在這兒執(zhí)行java,*.class,*.java也放這
: and.我將bin列入path中...
: ?
只要 Set CLASSPATH 這個環(huán)境變數(shù)并用分號分隔多個 Path
Set CLASSPATH = .... ; ...... ; ......
第二問
: 我的程式在編譯的時候出現(xiàn)了以下的訊息:
: failed to read:C:\JAVA\BIN\...\lib\javac.propeties
: Motorcycle.java:22:error message'toplevel.expected' not found
: Motorcycle Nsr;
: ^
: 因為學(xué)校沒開Java的課程,所以我是自己看書學(xué)的,對於Java的觀念還不甚清楚
: 若是下面的任一步驟有錯還希望大家多多指教....
: 我將程式碼附在底下,希望能夠得到您的寶貴意見,謝謝!
: package TrafficTools; //宣告一個名為 TrafficTools的package
: //請問在這一行一定要import任何類別嗎?
: (例如:java.applet.Applet)//
不一定 除非你須要其他類別 but default import java.lang.*
: //需要在這一行宣告介面并交給Motorcycle去implements嗎?
不一定 當(dāng)你有須要時
:
: Motorcycle Nsr; //宣告Nsr為Motorcycle類別的樣板,并繼承Motorcycle
: Nsr=new Motorcycle(); //建立Nsr物件
: Nsr.Count(); //利用Nsr物件使用 Count() 這一個method
這三行須要寫在 Motorcycle class 的 main Function 內(nèi) 因為這不是像 C++
class Motocycle {
// 一個 Java Application (not Applet) 一定要有的 function
public static void main(String Args[]) { // 程式的起點(diǎn)
Motorcycle Nsr;
Nsr = new Motorcycle();
Nsr.Count;
}
}
第三問
: 我是想將這個applet放在homepage上,那也要寫 main function嗎??
: main function好像不能放在homepage上吧....
對啊 !! application 才須要啊 !! applet 是用 init() 且 Motorcycle 要繼承
applet . 而不必 new Motorcycle Object 因為這是 Browser 做的
: 還有一點(diǎn)疑問是 Motorcycle Nsr;
: Nsr = new Motorcycle();
: Nsr. Count();
: 這三行一定要寫在Motorcycle這個類別里嗎?
: 請指教,謝謝!
Yes ...
Java 沒有 Gobal 的任何東西
第四問
> : 據(jù)說CGI程式可以用任何程式語言來寫是嗎 那麼可不可以用Java來寫呢
> : 如果可以 請問
> : 要用那個class及method來取得client傳來的資料呢 (通常從stdin)要怎麼寫
> : 而client端要如何呼叫server的Java CGI程式 例
: action="http://xxx.dom.???.tw/cgi-bin/___________">
> 再補(bǔ)充一下 是在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 直接支援執(zhí)行 Java 程式, 否則, 會有問題.
Java 程式是需由 interpreter 執(zhí)行的. 可能的一個變通方法,
就是執(zhí)行某個類似 shell 的程式 (如 *.bat, 假設(shè)在 Win95),
其中執(zhí)行 java xxx.class. 我沒有試過是否可行?
4. 不需要 symbolic link.
第五問
>: : 請問一下要如何在TextField中輸入中文?
>: : 謝謝
>: Java 字元是 Unicode,中文 big5 碼可能不行.
> 謝謝<
> 那如果我用TextField做Applet要如何讓
> Web使用者輸入中文呢?
目前所知是只能用copy & paste 輸入big5的中文 !
第六問
>如果想學(xué)java
可至段先生的站臺:http://atmwww.cm.nctu.edu.tw/~duann/javascript/script.html
第七問
介紹一個學(xué)習(xí) 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是否對應(yīng)到同一臺機(jī)器,只要不一樣
就會有SecurityException,這個訊息應(yīng)會秀在
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
: 這點(diǎn) m...沒問題,可以理解
: 好...那:
: System.out.println("...");
: System.out是變數(shù)??
: 變數(shù)里有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,當(dāng) System 這 class 被 load 到程式里時,
它會自動產(chǎn)生一個 InputStream(PrintStream) 的物件,然後配給 in(out) 這個 variable,
所以 in(out) 就可以使用 InputStream(PrintStream) 物件的 instance methods.
這樣不知清楚嗎?
第十問
: 請問已編譯好的 CGI 程式是否一定要放在 server 端的特殊目錄下???
: 如果沒有網(wǎng)路環(huán)境(單機(jī)) 該如何測試?
: PS:以 VB 撰寫
> NCSA版的httpd可以允許CGI程式以,*.cgi的方式存在并執(zhí)行而不必放在 server
> 端的特殊目錄下,我想你可以試看看,如果不行的話那我想你還是在你的
> 機(jī)器上裝一個server可能可以解決.
> 如果你成功了請告訴我如何完成的!!
單機(jī)的話 還是有辦法解決 只是一些unix上的指令用起來會有trouble
首先可架個ncsa的whttpd (不知有無95版???)
若用VB的話 我的作法是將它c(diǎn)ompiler成exe檔於c:\httpd\cgi-win目錄下
若用perl的話 就架個perl5在c:\usr\local\lib\perl下 當(dāng)然要在pif檔
及httpd.cnf檔略作修改 然後將*.pl放在c:\httpd\cgi-dos目錄下
以http://127.0.0.1/cgi-dos/*.pl 或 http://127.0.0.1/cgi-win/*.exe
就可在單機(jī)執(zhí)行cgi程式 test ok之後再upload至server中 較省錢說
或許有錯 請指教
*對 lynx 2.5 也可以單機(jī)行 CGI 程式,無需安裝 httpd
*在95或nt上, 可以自己設(shè)一個虛擬的ip
再加個站, 然後http到那個ip就可以了
第十一問
: : 也就是說要如何把: *.class ===> *.java
: : 轉(zhuǎn)變
: 目前不可能.
有限度上可能
http://web.inter.nl.net/users/H.P.van.Vliet/mocha.htm
第十二問
: 當(dāng)我在用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)的結(jié)構(gòu),有沒有哪位前輩可以教教我呢??
>
> 3)看版控制檔(*.led)的結(jié)構(gòu),也教教小弟好嗎??
*根據(jù)自己摸索可以顯示中文,但必須在*.font檔中,寫下你要的字的(*),
而font檔只要try一下就可以,*.led檔翻翻字典試看看,相信不久就能
了解.
*從舊版就一直可以的, 可以參考 http://esunbank.com.tw
*我是一個LED-SIGN的使用者
說一些我的經(jīng)驗
關(guān)於上面第一點(diǎn)
是可以的
只要去nctuccca.edu.tw /Chinese/ifcss/software/dos/banner中
用FTP抓 cbanner.exe 這一個檔案
這是一個將中文或其他文字變成以'"組成的大文字....
在WIN95中的使用辦法是
先要有ET等的中文字形程式
進(jìn)入DOS下執(zhí)行ET
再鍵入cbanner -p 進(jìn)行安裝你要的字型(如明體 隸書?.......)
回WIN95中執(zhí)行cbanner就可以看到變大的字型
按上面的字型旁的"標(biāo)示"鍵.就可以將變大的字型剪貼下來
--
再到http://www.cs.ccu.edu.tw/~sjs84/cled.html#modify中
抓修改過的class(Download)和font(cfont和cfont24)和他的demo.led
以編輯HTML的軟體編輯
可以將以剛才方式抓的變大字形加入cfont.font中
看看說明吧
第二問
> 有關(guān)action這個method不是有true&false的傳回值嗎?
> 不知道有沒有人有范例教人怎麼去應(yīng)用這傳回值...
> 也就是程式當(dāng)中如何知道action被執(zhí)行了(當(dāng)然是某個button被按了 或者是..)
> 然後在加以判斷其結(jié)果是不是你要的,不知道這段判斷的程式碼要加在哪邊才好..
>
> if(action(Event evt,Object obj) == true) {
> ...........
> }
> else
> ...........
一個程式片斷請你參考 :
public boolean action(Event evt, Object what) {
if (evt.target instanceof Button){
// 只處理 Button 所產(chǎn)生的 action, 其它的不管
....................
return true;
}
else
return false;
}
: 那請問這個action method的傳回值要怎麼去接收呢
: 因為只有當(dāng)我們按下Button的時候 action才會處理這個事件 然後在傳回
: true or false,這是我要怎麼抓住這個時機(jī)將這個傳回值加以利用呢
: 這才是我真正的問題
其實(shí)您可能想法上有些問題...
最重要的一點(diǎn), 就是我們只要把 action method 的傳回值,
看成是系統(tǒng)在用的就好了. :)
而我們是「寫」action 讓系統(tǒng) call 的人, 我們只要用
^^^^^^^^^^^^^^^^^^^^
(應(yīng)該是說 "Override" action 這個 method 來作處理..)
return true; 或 return false; 來告訴系統(tǒng)在這個 action method 中,
我們有沒有去處理該事件即可.
> 那請問這個action method的傳回值要怎麼去接收呢
> 因為只有當(dāng)我們按下Button的時候 action才會處理這個事件 然後在傳回
> true or false,這是我要怎麼抓住這個時機(jī)將這個傳回值加以利用呢
> 這才是我真正的問題
你不用去管它的 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://機(jī)器名稱/檔案名稱");
: 但執(zhí)行時他告訴我 unknown protocol : ftp
在 Java 中有一種 class 可直接作 ftp 的工作
如果記的沒錯的話, 不是在 java.net 就是在 sun.net 下
查查看 tutorial or book 就可以找到了, 在 Java! 中
還有一個 20 多行的 ftp 范例程式喔
第四問
: static這個method modifier是做什麼用的呢
: 小小問題..謝謝您的回答嘍!!! :))
嗯. 讓你的變數(shù)或方法.
成為所謂的 class variable(method)
例如 java.Math.* 的 method 都是 static 的.
就不需要先作一個 java.Math 的 instance.
可以直接以 java.Math.sin(...) 叫用.
第五問
>請問如何將婺字的string 轉(zhuǎn)為 int
String s="123";
int num;
num = Integer.parseInt(s);
第六問
> 我抓了JDBC回來 解開之後 利用JAVAC 時 卻告訴我找不到 SQL 的CLASS
> 由於我是生手 不太知道其COMPILER如何去找他須要的PACKAGE.
> 我用IMPORT JAVA.SQL 可是就是找不到??不知道是不是目錄的問題??
> 有沒有可以告訴我??謝謝!!
當(dāng)你解開後,會產(chǎn)生一個 jdbc 的目錄,
而且 SQL 的 CLASS 會放在 jdbc\classes\java\sql 內(nèi).
你就在 autoexec.bat 內(nèi)加下列的內(nèi)容:
set CLASSPATH=d:\jdbc\classes;
然後重新執(zhí)行autoexec.bat,這樣就可以了.
切記千萬不要將 sql 的目錄搬到 java\lib\java 內(nèi).
我試這個東西花了我快一個月的時間 :~~(
後來我重灌 win95 才OK...
> JDBC是有何功能?FTP上有嗎? 檔名為何?
JDBC 就是 Java DataBase Connectivity 的縮寫.
是使 Java applet (application) 有能力對關(guān)聯(lián)式資料庫做運(yùn)算.
放在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 上出現(xiàn)
> start: applet not initialized
> 這是啥原因啦!??
拜托, 你寫的程式又不是 Java Applet , 當(dāng)然沒有辦法用 appletviewer 看啊,
直接用 c:\>java MyStandAlone
就可以看到畫面上出現(xiàn)一行 Hello World! 字樣,
> 那如何才能在 appletviewer 上看到 Hello World! 呢?
> 要改那里呀?? :)
那你的 class MyStandAlone 必須 繼承 applet
而且必須按照 applet 的規(guī)矩來寫程式, 當(dāng)然也不能用
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 部份應(yīng)對這部份會有所說明才是.
JAVA Q&A第五集
客倌上菜了喲.................
> 就是如何使兩個同在一個htm中
> 的java applet能互傳數(shù)值....
目前光用 Java 是沒有辦法做到這點(diǎn)的... 每個 applet 都是彼此獨(dú)
立的, 兩者間想要溝通你得繞一大圈... 比如在你的 Web Site 寫個
Server來幫助這兩個 applet 溝通, 或是xxxx.... 等等.
不過你可以去 JavaSoft 的 homepage 看看, 在一篇評論 ActiveX
的文章中就題到這一點(diǎn)... 你的這個問題用 ActiveX 的解決方案很
容易就可以做到, 不過這方面我不熟, 你自己去找找相關(guān)資料吧!
Netscape 提了一個 LiveConnect 架構(gòu)
讓 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還是可以彼此溝通的
@應(yīng)該有很多方法:如使用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程式設(shè)計入門(陳建榮,王子裕,林湘茗編著)....
在第五章 APPLET 中有二個 APPLET同時溝通的范例程式....不妨去看看吧..
P5_3.HTML >>>>>>>>>>>>>>>大約在5-20頁
: 請問目前 java是否已有可 show bmp image 的 class ? 或是各位網(wǎng)
: 友有這方面經(jīng)驗者,可否指點(diǎn)一二 ?
: Thanks in advance ... :)
據(jù)我所知, Java 只直接支援 gif & jpeg 格式 image.
: 請問有那位網(wǎng)友知道"專家系統(tǒng)"??
: 弟想了解,可否介紹幾本書?
介紹你一本專家系統(tǒng)的書
全欣資訊 專家系統(tǒng)-方法應(yīng)用與實(shí)作 中文版的 $390(附磁片)
作者 郭耀煌(為成大資研所的老師)
內(nèi)容滿簡單的.主要為概念的介紹.還有一些經(jīng)典的范例哦!
至於有關(guān)的程式語言就介紹的較少
不過這書仍舊適合初學(xué)者自學(xué)的
中文的書都很久了, 都是七十年代的古書, 松崗去年有出一本新書!!
書名叫做"Prolog與專家系統(tǒng)", 名字大概是這樣!!
目前全世界No. 1 的專家系統(tǒng)G2 Real Time Expert System. 由本公司代理
你想要了解專家系統(tǒng)可以連絡(luò)本公司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 幫你
轉(zhuǎn)...
socket 的用法, 跟 UNIX 的 socket 大同小異吧? 看一看有關(guān) java.net.*
的 api 應(yīng)該就可以了
: 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
大概是它找不到j(luò)dbcodbc.dll吧? 這個檔在\jdbc-odbc\classes\jdbc\odbc\
下面,把它拷到路徑中任一目錄下試試...
: 我剛用Visual J++,
: 於是寫了一個所有教科書都有的小程式--Hello.World!
: compile和build時都過了!
: 執(zhí)行時卻出現(xiàn)java.lang.UnsatisfiedLinkError
: 不知到是那出了問題,是有那里沒設(shè)定嗎?還是沒裝MS IE3.0的關(guān)系呢?
: 請各位高手不吝指教!!
: 以下是程式內(nèi)容:
: class Hello
^^^^^^^^^^^^^^^^^^^^:
試看看 class Hello extends Applet
: {
: public static void main ( String args[] )
: {
: System.out.println("Hello.World!");
: }
: }
另解
> class Hello {
^ 前面加上 public ... 整個程式的主 class 必須要 public , 才可以被執(zhí)行
: > class Hello {
: ^ 前面加上 public ... 整個程式的主 class 必須要 public , 才可以被執(zhí)行
: > public static void main ( String args[] ){
: > System.out.println("Hello.World!");
: > }
: > }
不一定吧? 據(jù)我所知, 只要 main() 是 public 就可以了.
請指教.
對不起!我是原先的post者,首先感謝大家的不吝指教!!
原先的程式我用JDK編譯執(zhí)行過,可以正確執(zhí)行!
所以程式本身并無問題,所以問題應(yīng)是出在Visual J++上,
而各位提供的各種方法我都試過了,都不行耶!
因此希望大家?guī)臀蚁胂胧欠裨赩isual J++出了什麼問題!謝謝!!!....
: 在下初學(xué), 想請問前輩有沒有能夠幫忙轉(zhuǎn)中文字給LED的程式呢
試試小弟寫的程式.
1. 你需要有倚天的字型檔, 修改一下路徑, compile
就可以用了.
2. 要用 24x24 字型也可以, 程式要稍做修改, 需要請通知我.
3. 執(zhí)行後把輸出導(dǎo)相到一個檔案, 前面三行加上'字高' '字寬'
'字?jǐn)?shù)' 的參數(shù)即可當(dāng)led 的 font file.
有任何疑問歡迎與我聯(lián)絡(luò).
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("請輸入要轉(zhuǎn)換的文字:");
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);
}
: 現(xiàn)在要用 java 做到在 client 端 run 一個 applet
: 同時我在 server 端也執(zhí)行一個 java 的 application
: 用來接收 client 端所送回的 message...
: 就有點(diǎn)像 cgi 程式 但我還需要做一些其它的判斷
: 所以一定要用 java 來寫......
: 請問 這要如何處理??
兩方都使用socket 就可以做 client-server了, 看看java.net 里面的一些class
: 不知道java可否在Server端存取檔案呢
: 又 聽說Java可以扮演CGI的角色
: (不知道這樣的觀念對不對)
: 那為何網(wǎng)上的applet大多只有在動畫上打轉(zhuǎn)呢
有好幾種方法可在java 中讓applet 存取server 端檔案,一是用socket
在server上有一接收程式來執(zhí)行applet 所要的動作(當(dāng)然就可以包括檔案存取了)
另一是用URL 這個class 也可以讀取server 上的檔案(至於存檔我則沒用過,所以
不知道可不可以).
: 就是在圖形重疊時不畫不要的顏色
: 用g.drawImage會將整個四方形都畫出來
: 如何能做到SPRITE呢
只能指定 drawImage 時候的透明色要用那種顏色替代 沒辦法畫出重疊
時下面那張圖案.... 至少我看 API reference 是這樣說的....
用LVIEW PRO一下就好了......何必找麻煩......:)
@@@@@ 首先要設(shè)法讓你的圖形中要成為透明色的部份變成統(tǒng)一的某一種顏色,
我的方法是先在Lview的Option的選單下設(shè)定Background color,
要先選擇要設(shè)為透明的底色, 再選擇Mark selection using的選項
看看是否是設(shè)定到的背景顏色是否正確,
最後以GIF 89a的格式存檔
我也算是初學(xué)者,
前一陣子試過將兩張圖片疊在一起,
并讓前景的不規(guī)則圖形能在復(fù)雜的背景下移動:
Image foreground,background;
......
Graphics gr;
gr=this.getGraphics();
gr.drawImage(background,x1,y1,null);
gr.drawImage(foreground,x2,y2,null);
其中foreground就必須經(jīng)過Lview的處理
至於為什麼在drawImage第四個參數(shù) ImageObserver 要設(shè)為 null 我就不知了
> 我使用 JAVAH.EXE 程式去將 某個 .CLASS 檔案產(chǎn)生 .H 檔時發(fā)生問題,
> 我執(zhí)行下列命令:
> F:\JAVA\BIN\JAVAH.EXE Simple (在目錄下有 Simple.class檔案)
> 它給我的 error message 是 "Simple: no such class"
> 可是在目錄下確實(shí)有 Simple.class 檔案,
> 我的 CLASSPATH= .;F:\JAVA\LIB\CLASSES
> 希望各位先進(jìn)幫幫忙, 謝謝 !!!
你肯定大小正確嗎???
還有,好像要打F:\JAVA\BIN\JAVAH.EXE Simple.class 才行
不要想得她太聰明.
應(yīng)該不是打全名吧 ? 若打全名即 simple.class, javah會找 Simple目錄下的
class 檔案, 不過 error message 還是 "no such class"
Cafe 1.2里頭附的javah有此問題,改用JDK 1.02的就行了
> 我目前是用 SUN JDK 1.0.2, 但結(jié)果還是一樣
我知道原因了,你沒設(shè)classpath這個變數(shù)
通常是如下設(shè)定
set clasapath=c:\java\lib\classes.zip;.
^^^^^^^你的JDK所在目錄
cafe里的javah應(yīng)沒問題,也是忘記設(shè)classpath所致
>依照你的方法一試, 確實(shí)可以了謝謝你.
>可是我原來所設(shè)定的 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)
==============================================================
它的意思大概是若設(shè)定 classpath=.; 的話, javah
似乎對於第一個所設(shè)定的path (也就是 ".") 視而不見. 因此在 "." 再插入
其它目錄來騙過它. 或是依照你所寫的, 將 "." 擺在最後.
我有做一個實(shí)驗, 有關(guān)上述 path 問題如下:
執(zhí)行命令: javah HelloWorld
(1) 設(shè)定 CLASSPATH=.;c:\java\lib\classes.zip
錯誤 ==> "HelloWorld: no such class"
(2) 設(shè)定 CLASSPATH=C:\java\lib\classes.zip;.
OK
(3) 設(shè)定 CLASSPATH=.;.;c:\java\lib\classes.zip
OK
(4) 設(shè)定 CLASSPATH=.;;c:\java\lib\classes.zip
OK
(5) 設(shè)定 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
: 對不起, 我是原發(fā)信者, 我沒有把問題說清楚, 我的目的是要抓 applet
: instance 的 name, 而不是某些用 傳進(jìn)來的
我記得Java tutorial里講得很清楚,
用java.applet.getApplet(String name)即可
不是用getParameter()
請問cafe的一般版和完整版有什麼差別?
: > 如標(biāo)題所詢問 我想知道到那里可取得其操作手冊 最近剛由松崗買了一套回來
: > Install了老半天(差點(diǎn)讓我發(fā)火耶 近來才發(fā)現(xiàn) 原來Install能耗時這樣久 )
: > 可是無操作手冊可參考耶
NCTUCCCA/vendor/symentec/doc/cafeguid.zip
我用過!
不過resource好像不能用的樣子呢?
我在應(yīng)用電腦展里有去聽symantec caf'e的說明會
resource在雙位元版本的os下有問題..
過一陣子才會解決吧!!
> 有些Page中的applet,
> 我選了之後它又自己開了一個新window,
> 就執(zhí)行在新的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, 有點(diǎn)心得分享
使用native method的步驟請看Sun的java tutorial部份
這里要說的是tutorial里沒講清楚,也是最關(guān)鍵的一步,就是
制作出native method的.DLL(Windows 95), 我在網(wǎng)路上看到
的作法如下, 第一要有MSVC (2.1版以後,我是用4.0), 第二要有
Cafe,因為link時須要javai.lib, 但JDK附的不是MSVC看得懂的coff
格式, 而Cafe里有附j(luò)avai.lib_coff, 我不知Visual J++里是否有..
編譯的命令列參數(shù)如下, 以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
參數(shù)-Fe表示輸出的執(zhí)行檔名稱(為Hello.dll)
/I為include files path
/MD表示與MSVCRT.LIB link
^^^^^^(MSVC Run-time Library)
/LD表示制作.DLL
完畢後即產(chǎn)生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 資料結(jié)構(gòu)
> 該怎麼用呢? 可不可以自己來殺掉不必要的 Thread 而不要由系統(tǒng)來殺呢 ?
抓某thread的資料,用toString()或getName()
要?dú)⒛硉hread, 用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, 不過最好別亂殺,有些
//是系統(tǒng)(Java VM)的thread
詳細(xì)用法請參考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...
: 用途是隨意圖畫....
: 可是我不知道如何設(shè)定線條的寬度...
: awt.Graphics有提供這種 member function嗎??
沒有,如果真的要用的話,只好要 drawLine() 多畫幾次吧!!!!!