일반적인 문제
Javacomm과 RXTX는 설치할 때 다른 것들이 있습니다. 설치 지침에 따라 약간의 설치를 설치하는 것이 좋습니다. 설치 지침에 JAR 파일이 필요하거나 공유 라이브러리가 특정 폴더 아래에 있어야하는 경우 심각하게 받아 들여야합니다. 특정 파일이나 장치에 특정 소유권이 있거나 액세스 권한이 있어야하는 경우 심각하게 처리해야합니다. 많은 설치 문제는 설치 지침의 요구 사항에 따라 발생하지 않습니다.
Javacomm의 일부 버전에는 두 가지 설치 지침이 있습니다. 하나는 Java 1.2 이상에 사용되며 하나는 Java 1.1 버전에 사용됩니다. 잘못된 설치 지침을 사용하면 작동 할 수없는 설치 결과가 발생합니다. 반면, TXTX의 일부 버전/구성 요소/패키지에는 불완전한 설명이 포함됩니다. 이 경우 RXTX에서 게시 한 소스 코드를 얻어야하며 여기에는 완전한 설치 지침이 포함되어 있습니다.
또한 Windows의 JDK 설치 프로그램에는 3 개의 Java 가상 머신이 포함되므로 3 개의 확장 된 폴더가 있습니다.
또한/Windows의 디렉토리 구조에 존재하는 네 번째 JRE조차도. Javacomm은 JDK 및 모든 공개 JRE에 확장자로 설치해야합니다.
웹 스타트
Javacomm
Javacomm 및 RXTX의 일반적인 문제는 Java WebStart를 통해 설치를 지원하지 않는다는 것입니다. Javacomm의 악명 높은 것은 Javax.com.properties라는 파일을 JDK LIB 디렉토리로 호출해야하기 때문입니다. 이 파일의 필요성이 Javacomm의 불필요한 디자인이라는 것은 매우 실망스럽고 Javacomm의 디자이너는 쉽게 피할 수 있습니다. Sun은 완고하게 오류를 거부 했으며이 메커니즘이 필수적이라고 강조했습니다. Java는 오랫동안 그러한 의도를 전문으로하는 서비스 제공 업체 아키텍처를 가지고 있었기 때문에 특히 Javacomm을 언급했을 때 말도 안되는 말을했습니다.
이 속성 파일의 내용에는 한 줄만 있으며 로컬 -유도 Java 클래스 이름을 제공합니다.
드라이버 = com.sun.win.win32driver
다음은 웹 시작을 통해 javacomm을 배포하여 뇌에 상처를주는 속성 파일을 무시할 수있는 기술입니다. 그러나 최신 Javacomc -If Sun이 새 버전을 만들 때 심각한 결함이 있으며 실패 할 수 있습니다.
먼저 보안 관리자를 끄십시오. Sun의 일부 어리석은 프로그래머들은 끔찍한 javax.comm.properties 파일의 존재가 특히 처음로드 된 후에 반복해서 시원하다고 느꼈습니다. 이것은 다른 이유없이 파일이 존재하는지 확인합니다.
System.SetSecurityManager (NULL);
그런 다음 Javacomm API가 원래 시작되었을 때 원래 시작되었을 때 드라이버를 수동으로 초기화했습니다.
String drivename = "com.sun.comm.win32driver";
rxtx
RXTX는 일부 플랫폼에서 직렬 장치의 소유권과 액세스 권한을 변경해야합니다. 이것은 또한 WebStart를 통해 할 수없는 일이기도합니다.
프로그램이 시작되면 사용자에게 필요한 설정을 슈퍼 사용자로 수행하도록 요청해야합니다. 특히 RXTX에는 "법적"직렬 장비 이름을 확인하는 모드 일치 알고리즘이 있습니다. 누군가가 USB-to-Serial Converter와 같은 비표준 장치를 사용하려면 종종 물건을 엉망으로 만듭니다. 이 메커니즘은 시스템 속성에 의해 차단 될 수 있습니다. 자세한 내용은 RXTX의 설치 지침을 참조하십시오.
Javacomm API
소개
Java의 공식 직렬 통신 API는 Javacomm API입니다. 이 API는 Java 2 표준 버전의 일부가 아니므 로이 API의 구현은 별도로 다운로드해야합니다. 불행히도, Javacomm은 Sun에 충분한 관심을받지 않았으며 실제 유지 보수 시간은 그리 길지 않았습니다. Sun은 때때로 중요하지 않은 버그를 수리했지만 오랫동안 만료 된 중요한 유지 보수를하지 않았습니다.
이 섹션에서는 Javacomm API의 기본 작동에 대해 설명합니다. 제공된 소스 코드는 초점을 표시하기 위해 단순화되며 실제 응용 프로그램에서 개선해야합니다.
이 장의 소스 코드는 사용 가능한 유일한 예제 코드가 아닙니다. 많은 예제에는 Javacomm 다운로드가 포함됩니다. 이 예제에는 API 문서보다 사용 방법에 대한 자세한 정보가 포함됩니다. 불행히도 Sun에는 실제 자습서 나 설명 문서가 없습니다. 따라서이 API의 메커니즘을 이해하려면 이러한 예제를 배우는 것이 그만한 가치가 있으며 여전히이 API 문서를 배워야합니다. 그러나 가장 좋은 방법은 이러한 예를 배우고 사용하는 것입니다. 쉽게 사용하기 쉬운 응용 프로그램이없고 이러한 API의 프로그래밍 모델에 대한 이해가 일반적으로 공격됩니다. 명성과 기능과 비교할 때이 API는 더 좋지만 그것은 단지입니다.
API는 콜백 메커니즘을 사용하여 프로그래머의 새로운 데이터를 알립니다. 이것은 또한 문의 포트에 의존하기보다는이 메커니즘을 배우는 것이 좋습니다. Java의 다른 콜백 인터페이스 (예 : 그래픽 인터페이스에서)와 달리이 인터페이스는 하나의 모니터 만 청취 할 수 있습니다. 여러 청취자가 몇 가지 사건을 요청하면 다른 보조 청취자에게 정보를 배포하여 기본 모니터링 장치를 구현해야합니다.
다운로드 및 설치
다운로드
Sun의 Javacomm 웹 페이지는 다운로드 주소를 가리 킵니다. 이 주소에 따라 Sun 현재 (2007)는 Solaris/SPARC를 지원하는 Javacom 3.0 버전을 제공하며 Solaris/x86은 이미 Linux X86을 가지고 있습니다. 다운로드에는 Sun Company의 계정이 필요합니다. 다운로드 페이지는 등록 페이지에 대한 링크를 제공합니다. 등록의 목적은 명확하지 않습니다. 등록 할 때 사용자는 JDK 및 JRES를 다운로드 할 수 있지만 이러한 거의 사소한 Javacomc의 경우 Sun Company는 소프트웨어 배포 및 수출에 대한 법적 조항과 정부 제한을 인용했습니다.
공무원은 더 이상 Windows 버전의 Javacomm을 제공하지 않으며 Sun은 자체 제품 사망 전략을 위반했습니다. 그러나 여전히이에서 2.0의 Windows 버전을 다운로드 할 수 있습니다 (Javacom 2.0).
설치하다
다운로드와 함께 설치 지침으로 설치. Javacomm 2.0의 일부 버전에는 두 가지 설치 지침이 포함됩니다. 이 두 가지 설명의 가장 분명한 차이점은 잘못된 설명이 고대 Java1.1 환경에서 사용되며 Java 1.2 (JDK1.2.html)에 적합한 것이 정확하다는 것입니다.
Windows 사용자는 동일한 VM의 사본을 다른 장소 (보통 3-4)에 설치했음을 인식하지 못할 수 있습니다. 일부 IDE 및 Java 응용 프로그램은 자체 개인 JRE/JDK를 가져올 수도 있습니다. 따라서 Javacomm은 직렬 응용 프로그램을 개발하고 실행하기 위해 이러한 VM (JDK 및 JRE)에 반복적으로 설치해야합니다.
IDE는 새로운 라이브러리 (클래스 및 문서)를 배우는 대표적인 IDE 방법을 가지고 있습니다. 일반적으로 Javacomm이 IDE에서 식별해야 할뿐만 아니라 라이브러리를 사용하는 각 프로젝트도 식별해야합니다. IDE 문서를 읽으면 이전 버전의 이전 버전에주의를 기울여야하며 Javadoc API 문서는 Java 1.0 Java Doc 레이아웃을 사용합니다. 일부 현대 IDE는 더 이상 이러한 구조를 알지 못하며 JAVACOMCM2.0 문서를 도움말 시스템에 통합 할 수 없습니다. 이 경우 문서를 읽으려면 외부 브라우저가 필요합니다 (권장 활동)
소프트웨어가 설치되면 샘플 및 Javadoc 디렉토리를 테스트하는 것이 좋습니다. 설치가 올바른지 확인하기 위해 샘플 응용 프로그램을 빌드 및 실행하는 것이 합리적입니다. 샘플 프로그램은 일반적으로 특수 플랫폼 (하드 코드를 다시 작성한 COM 포트 식별자)에서 실행하기 위해 약간의 조정이 필요합니다. 샘플 프로그램을 실행할 때는 캐롤라이어를 사용하는 것이 가장 좋습니다.
Serial_programming : RS-232 연결 및 Serial_programming : 모뎀 및 AT 명령은 직렬 응용 프로그램 개발 환경을 구축하는 방법에 대한 정보를 제공합니다.
예상 직렬 포트를 찾으십시오
Javacomm 직렬 프로그래밍을 사용할 때 수행해야 할 첫 세 가지
열거 및 선택 기대의 포트 로고는 같은 주기로 완료됩니다.
import javax.comm.*; "com1"... "comx"로서, 그리고 // 유니스 장치 이름으로 "/dev/tty ..." 대신 사용자를 구성 할 수있게합니다 .//String WantmentPortName = "/dev/ttya"; 식별자는 // (a) 직렬 (병렬) 포트를 나타내거나 // (b)는 디자인 이름과 일치합니다 .//commportidentifier portid = null; commptionIdifier pid = (commptionIdifier) portableTifiers.nextElement (); ) {System.err.println ( "Serial Port를 찾을 수 없음" + WANDERPORTNAME);} /// 포트를 얻기 위해 포트 식별자를 사용하십시오 바인딩 된 특정 플랫폼과 관련된 드라이버의 기본 액세스 가능한 직렬 로고 목록. 이 목록은 실제로 Javacomm을 통해 구성 할 수 없습니다. Methods Commptidifier.addportName ()은 드라이버 클래스가 플랫폼과 관련되어 있고 구현이 공개 API의 일부가 아니기 때문에 오도됩니다. 드라이버에 의존하면이 포트 목록은 드라이버에서 구성/확장 될 수 있습니다. 따라서 Javacomm이 특정 포트를 찾지 못하면 운전자에 대한 일부 변경 사항이 때때로 도움이됩니다. 특정 포트 식별자가 발견되면이를 사용하여 예상 포트를 얻을 수 있습니다 : ///////////////////// 0 포트 식별자 사용 계정 // serialport port = null; {port = (serverport) portid.open, // 포트 10000을 요구하는 // 포트를 획득하기 위해 대기); e); 시스템 (1);} /////////////////4.
초기화 직렬 포트
직렬 포트의 초기화는 매우 직관적입니다. 통신 매개 변수 (포터 속도, 데이터 비트, 스톱 비트 및 꼭두각시 검증)를 하나씩 설정할 수 있습니다.
초기화의 일부로, 다음 예에서는 입력 및 출력 통신 스트림을 구성 할 수 있습니다.
java.io.*; ///// 입력 리더 및 출력 스트림은 일반적으로 문자 데이터 전송뿐만 아니라 양방향으로 스트림을 사용합니다. null; // 일반적인 목적. Tenput Stream : Writ 그에 따라 commit에 대한 유니 코드, "ISO-8859-1"); 여기에서 // performreadwritecode (); /////////////////// 그렇지 않으면 Java, Driver 및 OS : = NULL) PORT.CLOSE ();
간단한 데이터 전송은 단순히 데이터를 작성합니다
직렬 포트에 데이터를 작성하는 것은 기본 Java IO만큼 간단합니다. 그러나 AT Hayes 프로토콜을 사용할 때는 여전히 몇 가지 예방 조치가 있습니다.
클립 보드
할 일 :
동일한 스트림에서 이진과 문자의 입력 및 출력을 혼합하는 방법을 설명하십시오.
흐름을 사용하기 위해 샘플 프로그램을 수정하십시오
// 출력 os.print ( "at"); os.print ( "/r/n"); 이 경우 보낸 명령. "at"is.reamline ();
간단한 데이터 읽기 (회전)
작문 작업을 올바르게 사용하는 경우 (위에서 설명한대로) 간단한 명령 만 있으면됩니다.
// 응답을 읽습니다. 응답 = is.Readline ();
간단한 읽기 및 쓰기 질문
이전 섹션에서 보여준 간단한 연속 읽기 및 쓰기에는 매우 심각한 결함이 있습니다. 모든 작업은 I/O를 차단하여 수행됩니다. 즉, 읽을 수있는 데이터가 없거나 출력 버퍼가 가득 찬 경우 (장치가 더 많은 데이터를 수용 할 수 없음)를 의미합니다.
읽기 및 쓰기 메소드 (이전 예에서는 os.print () 또는 is.readline ()이 반환되지 않으므로 응용 프로그램이 중단됩니다. 더 정확하게는 읽기 및 쓰기 실이 차단됩니다. 해당 스레드가 응용 프로그램의 기본 스레드 인 경우, 차단 조건이 해제 될 때까지 응용 프로그램이 중지됩니다 (즉, 읽을 수있는 데이터 또는 장치가 재구성 될 수 있음).
응용 프로그램이 가장 원시적이지 않으면 프로그램이 차단됩니다. 예를 들어, 최소한 사용자가 커뮤니케이션 작업을 취소 할 수 있어야합니다. 이를 위해서는 비 차단 I/O 또는 비동기 I/O를 사용해야합니다. 그러나 Javacomm은 표준 I/O 시스템 (InputStream, OutputStream)을 기반으로하지만 나중에 표시되는 변형 기술을 사용할 수 있습니다.
So -Palled "변형 기술"은 사건 알림 메커니즘을 통해 Javacomm이 비동기 I/O에 제공하는 제한된 지원입니다. 그러나 Java에서 I/O를 차단하기 위해 비 차단 I/O를 실현하는 일반적인 솔루션은 스레드입니다. 일련의 포트 쓰기 작업을위한이 솔루션은 실용적이고 실현 가능합니다. 이는 직렬 포트를 작성하여 작업을 작성하는 것이 좋습니다.
읽기 작업은 별도의 스레드에서도 처리해야하지만 Javacomm 사건 알림 메커니즘을 사용할 필요는 없습니다. 요약 :
작업 읽기 및 사용 이벤트 알림 및/또는 별도의 스레드;
별도의 스레드를 사용하여 작업을 작성하면 이벤트 알림 메커니즘을 선택할 수 있습니다.
다음 부분은 다른 세부 사항을 소개합니다.
이벤트 드라이브 직렬 통신 소개
Javacomm API는 I/O를 차단하여 발생하는 문제를 극복하기위한 이벤트 알림 메커니즘을 제공합니다. 그러나이 메커니즘은이 전형적인 태양 방법에서도 문제가됩니다.
원칙적으로 응용 프로그램은 이벤트 모니터를 특정 직렬 포트에 등록 하여이 포트에서 중요한 이벤트를 받기위한 알림을받을 수 있습니다. 데이터를 읽고 쓰는 가장 흥미로운 두 가지 이벤트는
javax.comm.serialportevent.data_available 및 javax.comm.serialportevent.output_buffer_empty
그러나 이것은 또한 두 가지 질문을 가져옵니다.
자세한 토론을 수행하기 전에 다음 섹션에서는 직렬 이벤트 프로세서를 구현하고 등록하는 주요 방법을 보여줍니다. 직렬 포트에는 하나의 이벤트 프로세서 만 있으며 가능한 모든 이벤트를 처리해야합니다.
직렬 이벤트 프로세서를 설정하십시오
javax.comm 정보에 대한 정보는 특정 커뮤니케이션 *을 준수해야합니다. * @param 이벤트 서비스 이벤트 * // SerialPortEvent (SerialPortEvent). event.geteventtype () {restput_empty : event serialportevent.data_available; 브레이크; Break; / ** * 출력 버퍼 빈 이벤트를 처리하십시오. 참고 :이 이벤트의 수신은 * AP I 사양에 의해 보장되지 않습니다. / WU 데이터 구현}/ ** * 데이터 사용 가능한 이벤트를 처리합니다. * @Param 이벤트 */ 보호 된 void dataavailable (serialportevent) {// Serial Port에서 읽기 구현}}. 리스너가 구현되면 특정 직렬 사고를 모니터링하는 데 사용할 수 있습니다. 그렇게하려면 직렬 포트를 듣는 인스턴스를 추가해야합니다. 또한 각 이벤트 유형의 수신에는 별도의 응용 프로그램이 필요합니다.
Serialport Port = ... /// 포트 매개 변수를 구성하면 ance가 활성화됩니다. 이미지 ServiceTlistener // SerialListener의 새로운 인스턴스가 작성됩니다 e); 포트.
데이터 작성
별도의 분리가있는 데이터 작성은 단 하나의 목적입니다. 직렬 포트가 데이터를 작성할 준비가되지 않았기 때문에 전체 응용 프로그램 블록이 잠겨있는 것을 피하기 위해.
간단한 스레드 -안전 링 버퍼 실현
기본 프로그램 라인과 독립적 인 스레드를 사용하여 작업을 작성하여 어떤 방식으로 작성 해야하는 데이터가 기본 응용 프로그램 스레드 (기본 스레드)에서 쓰기 스레드에 제출되었음을 나타냅니다. 이는 바이트 어레이와 같은 공유 비동기 이벤트 버퍼를 사용할 수 있습니다. 또한 기본 프로그램은 데이터 버퍼에 데이터 또는 데이터 버퍼를 작성할 수 있는지 여부를 결정할 수있는 방법이 필요합니다. 데이터 버퍼가 가득 차면 직렬 포트가 작업을 작성할 준비가되지 않았으며 출력 할 데이터가 대기 중임을 나타냅니다. 주요 프로그램은 공유 데이터 버퍼에서 사용 가능한 새로운 여유 공간을 문의해야합니다. 그러나 기본 프로그램 간의 차이에서는 사용자 인터페이스 업데이트 (GUI), 데이터를 종료 할 수있는 명령 프롬프트를 제공하는 등의 다른 작업을 수행 할 수 있습니다.
언뜻보기에는 PipedInputStream/PipedOutputStream 이이 커뮤니케이션에 좋은 아이디어입니다. 그러나 파이프 라인 흐름이 정말 유용하다면 태양은 태양이 아닙니다. 해당 PipedoutStream이 제 시간에 청소되지 않으면 PipedInputStream이 차단되므로 응용 프로그램 스레드가 차단됩니다. 독립 스레드를 사용하더라도 피할 수는 없습니다. java.nio.pipe도 이것과 같은 문제가 있습니다. 장애물은 플랫폼과 관련이 있습니다. Javacomm을 사용하여 전통적인 I/O를 NIO로 변경하는 것은 그리 좋지 않습니다.
이 기사에서는 스레드 데이터 전송을 위해 매우 간단한 동기 링 버퍼 영역이 사용됩니다. 현실 세계의 응용 프로그램은 더 복잡한 버퍼를 사용할 수 있습니다. 예를 들어, 실제 세계의 실현에는 입력 및 출력 흐름의 관점에서 작동 버퍼가 필요합니다.
이러한 링 버퍼는 특별하지 않으며 스레드 처리에는 특별한 속성이 없습니다. 데이터 버퍼를 제공하는 데 사용되는 간단한 데이터 구조 일뿐입니다. 데이터 구조에 액세스하는 것이 스레드 보안인지 확인하기 위해 버퍼가 여기에서 구현되었습니다.
/*** 동기화 된 Raing Buffer.*한 스레드에서 다른 스레드로 OVERDA에 적합합니다. ** 버퍼의 크기 ** / ** 현재 데이터 영역의 시작; 1k */ public ringbuffer () {this (1024);} * 특정 버퍼 크기가있는 링 버퍼 (int size) {this.size = size [size]; CLEAR ();} / ** * 버퍼 내용을 제거하십시오 정상적인 작동 중에 쓴 경우} / * 버퍼의 크기입니다. , 다음은 버퍼에서 데이터를 읽거나 다른 스레드가 버퍼를 제출하거나 비우는 경우에 사용하는 경우 * / public * / public에서 사용할 수 있습니다. int data () {return <= end -start + size; 묶여 있으면 * @return 현재 사용 가능합니다. posses. PARAM DATE DATER DATA를 작성하는 데이터 * @Param Data of Data in Data writing */ int write (byte d ata [], int Office. , int n) {n <= 0) int legine hec ); If (i> 0) {data, off, buffer, end, i); , END> = 시작 : 0) {System.ArrayCopy (data, off, 0, i); } / ** * 버퍼에서 소유 한만큼 많은 데이터를 읽습니다. * @param 데이터를 저장할 수있는 데이터 * / int read (byte data []) {return read (data, 0, data. length);} /** * 버퍼에서 소유 한만큼 많은 데이터를 읽습니다. * @param 데이터를 저장할 수있는 데이터 * @param data of data를 읽을 수 있습니다. */ int read (byte data [], int office 뚜껑 : 0 = <= off <data.length; int i = math.min이 아닌 경우에 예외를 던지 (i> 0) {arraycopy (start, data, off); 0;} i = MATH i;} return n -remain;}}}}}이 링 버퍼를 사용하면 이제 한 스레드에서 다른 스레드로 데이터를 제출할 수 있습니다. 물론, 다른 스레드는 안전하고 비 차단 방법입니다. 여기서 핵심 요점은 버퍼가 가득 차거나 버퍼가 비어있을 때 데이터의 읽기 및 쓰기가 막히지 않는다는 것입니다.
"Serial Enterprise 프로세서 작성"섹션 데모의 이벤트 프로세서 데모의 개요에 따르면 "Simple, Thread Safe Ring Buffer"에 소개 된 공유 링 버퍼를 사용하여 output_buffer_empty 이벤트를 지원할 수 있습니다. 모든 JAVACOMM 구현 이이 이벤트를 지원하는 것은 아니므 로이 코드를 호출하지 못할 수 있습니다. 그러나 가능하다면, 최상의 데이터 처리량을 보장하는 것의 일부입니다. 직렬 포트를 오랫동안 유휴 상태로 만들 수 있기 때문입니다.
이벤트 모니터의 개요는 outputbuffrempty () 메소드를 제공해야합니다.
Ringbuffer DataBuffer = ...; handle 출력 버퍼 빈 이벤트는 선택적이며 * @param 이벤트는 출력 버퍼 빈 이벤트 * / 보호 된 void입니다. outputBuff on (serialportEvent event) {}다음 예는 데이터 대상이 파일이라고 가정합니다. 데이터가 도착하면 직렬 포트에서 제거되어 대상 파일에 기록됩니다. 실제로 데이터의 EOF 로고를 확인하여 모뎀 (일반적으로 "CAT")을 명령 모드로 조절해야하기 때문에 이것은 정제 된보기입니다.
import javax.comm. ** * SerialPortevent e) {serialport port = (serialport). serialportevent.data_available : // 현재 사용 가능한 모든 데이터를 try {int c; CATCH (IoException ex) {...} break ... ... is.close (port! = null) port.close. );}
복조기 제어를 수정하십시오
Javacomm은 주로 직렬 포트에서의 직렬 처리 및 데이터 전송에 대해 우려하고 있습니다. Hayes 변조 및 복조 지침과 같은 높은 수준의 프로토콜을 이해하거나 지원하지 않습니다. 일반적으로 고객 수준의 고양이를 제어하는 데 사용됩니다. 이것은 Javacomm의 과제가 아니며 버그도 아닙니다.
다른 특수 직렬 장치와 마찬가지로 Javacomm이있는 고양이를 제어하려면 Javacomm에 필요한 코드를 작성해야합니다. "Hayes-Commposition Modems and at Commands"페이지는 Hayes Cats를 처리하는 데 필요한 기본 정보를 제공합니다.
Windows 또는 Linux Control 명령과 같은 일부 운영 체제는 특수 유형 또는 CAT 제어 명령 브랜드를 구성하여 다소 표준을 제공합니다. 예를 들어, Windows Cats의 "드라이버"는 일반적으로 개별 고양이를 설명하는 등록 된 입구입니다 (실제 드라이버는 보편적 인 직렬 변조 드라이버입니다). Javacomm은 그러한 운영 체제의 특정 데이터를 얻을 수 없습니다. 따라서 사용자가 개별 고양이 사용 응용 프로그램을 구성하거나 해당 플랫폼 (로컬) 코드를 추가 할 수 있도록 별도의 Java 도구를 제공해야합니다.
rxtx
개요 및 버전
Sun은 Linux에 대한 Javacomm 참조 구현을 제공하지 않았기 때문에 사람들은 Java 및 Linux 용 RXTX를 개발했습니다. 나중에 RXTX는 다른 플랫폼으로 이식되었습니다. 최신 버전의 RXTX는 Linux, Windows, Mac OS, Solaris 및 기타 운영 체제를 포함한 100 개 이상의 플랫폼을 실행하는 것으로 알려져 있습니다.
rxtx는 Javacomm API와 독립적으로 사용할 수 있거나 너무 많은 Java Commum API 서비스로 사용될 수 있습니다. 후자가 JCL이라는 포장 패키지를 사용하는 경우. JCL 및 RXTX는 일반적으로 Linux/Java로 포장되거나 JCL은 코드와 완전히 통합됩니다. 따라서 하나씩 다운로드하기 전에 CD의 Linux 배포 버전의 CD를 살펴보십시오.
Sun의 제한된 지원과 Javacomc의 부적절한 문서로 인해 Javacomc API를 포기하고 JCL 포장 패키지 대신 RXTX를 직접 사용했습니다. 그러나 RXTX의 문서는 매우 드 rare니다. 특히 RXTX 개발자는 버전과 백 컨텐츠를 혼란 (예 : 사용 또는 사용하지 않은 통합 JCL)으로 만들기를 좋아합니다. 버전 1.5에서 시작하여 RXTX에는 대체 클래스의 공개 javacomm 클래스가 포함되어 있습니다. 법적 이유로 인해 Java.pomm 패키지가 아니라 Gui.io에있었습니다. 그러나 포장 컨텐츠의 기존 버전은 매우 다릅니다.
따라서 원본 Javacomm API를 프로그래밍하려면
Sun Javacomm General Edition. 이 기사를 작성할 때 실제로 UNIX 패키지 (Linux 또는 Solaris와 같은 다양한 유일한 유닉스 시스템 지원 포함)는 Windows에서도 Java.comm의 보편적 인 구현을 제공하는 데 사용해야합니다. Java를 사용하여 해당 부품을 구현하는 경우 만 사용되지만 UNIX의 로컬 라이브러리는 무시됩니다.
rxtx 2.0, Javacomm 패키지 아래의 Universal 버전에 다른 공급자가있는 경우. 그러나 패키지를 gnu.io로 교체하려면 Javacomc 응용 프로그램을 RXTX 응용 프로그램으로 변환하면됩니다.
지원 Windows의 행동에 실망한 Javacomm을 만드는 많은 회원 중 한 명을 포기하면 Javacomm을 RXTX로 전송해야합니다. 위에서 볼 수 있듯이 rxtx 버전을 설치했다고 가정하면 다음 옵션을 선택할 수 있습니다.
上面的第一项在前面已经解释,第二项也相当简单。对于需要将JavaComm应用移植到RxTx 2.1上来的人,只需要将应用源代码中所有对“java.comm”包的引用换成“gnu.io”包,如果原始的JavaComm应用编写恰当,这里就没有其他的事情需要去做。
在Unix平台上,RxTx 2.1甚至提供了工具“contrib/ChangePackage.sh”去在源代码树形结构中执行全局的替换,这样的替换在其他的平台很容易使用支持重构功能的IDE(集成开发环境)来完成。