2009-03-12 28 views
6

Chúng tôi sử dụng ứng dụng java quản lý pinpad thông qua cổng nối tiếp. Điều này hoạt động hoàn hảo trên các cửa sổ với Sun Comm.jar, dll được cung cấp và tệp thuộc tính.Làm cách nào để có Java sử dụng cổng nối tiếp trong Linux?

Bây giờ chúng tôi đang cố gắng sử dụng giải pháp này trên Linux (thực sự nó chạy trên các hương vị khác nhau của linux trong lĩnh vực này) - với chế độ máy chủ Ubuntu.

Sau nhiều nỗ lực - máu, mồ hôi và nước mắt gần như chúng ta có kịch bản này:

phiên bản Java 1.4.2_17 Linux - Ubuntu libs Comm - Comm3 cung cấp bởi ánh nắng mặt trời với người lái xe mặc định

Một kiểm tra comm bên ngoài cho thấy các cổng comm:/dev/ttyS0 và/dev/ttyS1 Nhưng ứng dụng java cho biết không thể mở cổng/dev/ttyS1

(sử dụng các tập tin RXRT sản xuất lỗi cổng không hợp lệ)

Có ai có thể sử dụng java 1.4.2 trên Linux để giao tiếp cổng nối tiếp và tìm thấy một giải pháp mà tôi có thể áp dụng trong kịch bản của tôi không?

rất nhiều đánh giá cao

Phill

+0

Bạn có chắc chắn rằng quá trình java có quyền mở/dev/ttyS [01] không? –

+0

lỗi là gì? Và tôi đồng ý với Eugene rằng nó có khả năng cho phép – TofuBeer

+0

bất kỳ giải pháp nào cho vấn đề này? Tôi cũng có lỗi tương tự. – Joe

Trả lời

1

Nó được một lúc kể từ khi tôi đã làm điều này. Tôi nhớ rằng bạn không thể chỉ mở/dev/ttyS0 dưới dạng tệp và I/O cho nó.

Tôi nhớ có cùng sự cố với các lọ Sun IO.

Giải pháp mà tôi nhớ đã giải quyết là tạo một chương trình dòng lệnh nhỏ trong C lặp lại stdin với cổng nối tiếp và cổng nối tiếp vào stdout. Sau đó, tôi khởi chạy chương trình này từ quá trình java của tôi. Tôi không có mã nhưng có rất nhiều ví dụ trên web cho các chương trình c ghi vào cổng nối tiếp linux.

+0

hmmm, tôi đã cung cấp một giải pháp cho anh chàng ở New Zealand đang tìm kiếm sự giúp đỡ về vấn đề này. Nhưng tôi cần phải chờ ngày mai (11 giờ trước) để xem họ có đi đâu không. Sau đó, tôi sẽ đặt phát hiện của tôi ở đây. cảm ơn người đàn ông –

2

Đảm bảo rằng bạn đang sử dụng người dùng có quyền truy cập vào các cổng nối tiếp. Một số bản phân phối đặt các cổng nối tiếp trong nhóm uucp, vì vậy hãy đảm bảo rằng người dùng thuộc về nhóm đó.

1

Chúng tôi đã được sử dụng thư viện SerialIO cho truyền thông nối tiếp Java trên cả Windows và Linux trong nhiều năm nay với kết quả tuyệt vời (và không có, tôi không làm việc cho họ :-)):

http://serialio.com/products/serialport/serialport.php

Các thư viện không tự động dò tìm các cổng nối tiếp sẵn có trên Linux - bạn phải tự cấu hình chúng.

+0

Xin chào, tôi đang cố định cấu hình SerialIO trong Ubuntu. Tôi nhận được các lib bản địa được tải chính xác cho ubuntu 64bit của tôi nhưng khi tôi cố gắng để mở một cổng tôi nhận được javax.comm.NoSuchPortException:/dev/ttyUSB0: không tìm thấy trong danh sách cổng. nhưng thiết bị IS ở đó và nó không được sử dụng bởi bất kỳ ứng dụng nào khác. Bất kỳ trợ giúp nào cũng sẽ được đánh giá cao. Có lẽ tôi có thể đưa ra một câu hỏi mà bạn có thể trả lời? Cảm ơn! –

+0

@DavidHofmann Oooof ... đã một vài năm kể từ khi tôi làm việc trên những thứ đó - tôi không chắc chắn rằng tôi còn có mã nữa :-(Tôi vẫn nhớ vấn đề chính xác và tôi nghĩ * tôi phải thêm/dev/tty/USB0: vào một tập tin cấu hình mà tôi nghĩ * ánh xạ cổng USB vào cổng nối tiếp. Không có nhiều trợ giúp tôi sợ :-(Tôi sẽ tìm kiếm và xem liệu tôi có thể khai thác mã gốc không . – tonys

0

Chúng tôi không thay đổi nhiều, không có gì trong thư viện được sử dụng. nhưng việc xóa sử dụng EventListener trên đối tượng cổng nối tiếp đã khắc phục được sự cố.

Điều này thực sự cho phép mã của chúng tôi hoạt động trên linux (jre1.4.2, trình điều khiển slackware và Suns Comm3) nơi đây không phải là vấn đề trên windows - lạ.

Phill

3

Tôi biết đây là một câu hỏi cũ nhưng tôi đã tạo ra một gói phần mềm Java và thư viện bản địa để cho phép cổng nối tiếp đọc và viết, hiện tại chỉ có chế độ đồng bộ.

Đó là mã nguồn mở và có sẵn trên GitHub:

j232 - Các mã nguồn Java

libj232 - thư viện bản địa j232 của.

Trang wiki là here.

Lưu ý đây là gói và thư viện chỉ dành cho Linux.

Các vấn đề liên quan