http://www.javaworld.com.tw/jute/post/view?bid=29&id=67074&sty=3
我找到此論壇之前所討論的相關資料
大概資料如下:
Package java comm
大概資料如下:
JNI 指的是讓 JVM 執行 native code 的方式,要搞 JNI 你要會 C/C++ 來產生 native code。
其實 JCA 底層也是用 JNI,你在不同的平台上要安裝不同的 native library。建議你使用 JCA 就可以了。
JNI其實他就是先用C寫好傳送位址的動作
像_inp, _outp等等
這種可能就是大家所謂比較低階的部分
也就是java無法直接操控的部分
然後編譯成.dll之後
再用java去使用他
說穿了就是利用C語言來達成目的
JCA的說明文件裡面也說著以後可能會支援USB和SCSI
USB可以,請參考
http://www-106.ibm.com/developerworks/java/library/j-usb.html
java.comm.*;-->與rs232的相關package下載
http://java.sun.com/products/javacomm/downloads/index.html
此還附有範例程式碼與API文件
存放路徑
此是安裝JRE的軟體
1.C:/Program Files/Java/j2re1.4.2/bin/win32com.dll
2.C:/Program Files/Java/j2re1.4.2/lib/javax.comm.properties
3.C:/Program Files/Java/j2re1.4.2/lib/ext/comm.jar
Or
此是安裝J2sdk的軟體
1. C:/j2sdk1.4.1_01/jre/bin/win32com.dll
2. E:/j2sdk1.4.1_01/jre/lib/ javax.comm.properties
3. E:/j2sdk1.4.1_01/jre/lib/ext/comm.jar
介紹JAVA IO 的書
http://www.books.com.tw/exep/prod/booksfile.php?item=0010202835
相關網址:
http://www.javaworld.com.tw/jute/post/view?bid=29&id=18855&sty=3&age=0&tpg=1&ppg=1#18855
http://www.javaworld.com.tw/jute/post/view?bid=29&id=18609&sty=3&age=0&tpg=1&ppg=1#18609
http://www.javaworld.com.tw/jute/post/view?bid=29&id=18591&sty=3&age=0&tpg=1&ppg=1#18591
http://www.javaworld.com.tw/jute/post/view?bid=29&id=18995&sty=3&age=0&tpg=1&ppg=1#18995
在程式連結之前,請先安裝藍芽的Drive,並且開啟藍芽裝置
以下是對package java.comm內部類別的相關介紹
Class javax.comm.CommPortIdentifier
?P 決定通訊埠使有效的驅動
?P I/O運轉開始的通訊埠
?P 決定port的所有權
?P 解決port所有權的競爭
?P 管理事件指出改變所有權狀態
Class javax.comm.SerialPort
?P 繼承class javax.comm.CommPort特性
?P 當用到addEventListener( )此方法時,會實作Interface javax.comm.SerialPortEventListener的serialEvent(SerialPortEvent event)方法內容
?P 當Commidentifier所定義出來的Port出來時,利用此類別設定Port參數。例如:COM1 Port設定以4800鮑的傳輸率、8 bits資料傳輸,1bit停止位元
Class javax.comm.SerialPortEvent
?P 序列埠發生事件種類
InputStrem
?P FileInputStrem類別利用read( byte[] )方法,將檔案內容(指FileInputStream物件)字串放進byte[]陣列內讀取。
?P 例如:XXX.txt檔案裡面,假設寫了”My name is Java”這幾個字,而我宣告一個FileInputStream的物件名為FIS,指的就是XXX.txt。FIS.read( byte[]物件 )接著,我利用陣列方式將這幾個字”讀取”?釧顐駬yte陣列裡面變成如下:
Byte[0] = M
Byte[1] = y
Byte[2] =
Byte[3] = n
.
.
.
以此類推
Class FileOutputStream
?P 此類別繼承java.lang.Object特性
?P 利用write( )的方法寫到檔案裡面去。
?P 例如:宣告一個OutputStream的物件為OS
1
|
OS = new OutputStream(“XXX.txt”);
|
假設宣告一個字串
String a = “My name is hobe”;
我們將a字串的內容放進XXX.txt內,就需要write( )這個方法。
我們利用getBytes( )方法,將字串放入”byte陣列”
Interface javax.comm.CommDrive
?P 此不適合用在應用階層程式
?P 能呼叫CommPortIdentifie的open( )的方法
?P 能初始CommPortIdentifie的通訊埠
?P getCommPort( )傳回的物件繼承SerialPort和ParallelPort
Class javax.comm.CommPort
?P 非public存取型態
?P 其下有兩個子類別,class javax.comm.ParallelPort和class javax.comm.SerialPort
開啟通訊埠(尚未設定)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
import java.io.*;
import java.util.*;
import javax.comm.*; //RS232與IEEE 1284之間的通訊
public class netest
{
static CommPortIdentifier portId; //先行定義Port的物件
static Enumeration portList; //所有port的集合,請參考collection相關章節
public static void main(String[] args)
{
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) // hasMoreElements()指的是,是否還有其它物件內容
{
portId = (CommPortIdentifier) portList.nextElement();
System.out.println(" "+portId.getName()); //取得通訊埠的名稱,例如:COM1、COM2
}
}
}
|
設定com port值
1
|
serialPort.setSerialPortParams(4800,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
|
COM1 Port設定以4800鮑的傳輸率、8 bits資料傳輸,1bit停止位元
RS232傳輸率相關網址:http://www.bbdsoft.com/rs232.html
上面的資料很豐富
我也看了裡面的相關範例,如果三個路徑沒設定好
complier就算能過,執行時也會找不到相關類別
看來我的問題就出現在這...
.dll 檔沒看到
這是我後來做的一點點相關文件...
希望對其他人有用處
感謝版主的教導