2009-04-19 6 views
5

Tôi đang viết một ứng dụng SWT cần phải nằm trong khay hệ thống và tự động bật lên bất cứ khi nào người dùng kết nối một số thiết bị USB (ứng dụng đóng vai trò như bảng điều khiển của nó).SWT: Nhận thông báo về thay đổi thiết bị hệ thống (kết nối/ngắt thiết bị USB)

Cách để thực hiện điều này trong môi trường tự nhiên (win32 trong trường hợp này, nhưng cuối cùng tôi phải là nền tảng độc lập) là nghe sự kiện WM_DEVICECHANGE, sau đó kiểm tra xem thiết bị của tôi đã bị ngắt kết nối chưa.

Googling đối tượng, có vẻ như SWT không thực sự xử lý loại sự kiện này. Có ai có bất kỳ ý tưởng như thế nào để đạt được điều này? giải pháp dự phòng của tôi sẽ được lấy mẫu cổng USB mỗi n giây, tìm kiếm các thiết bị, nhưng đây là một giải pháp không-không như xa như tôi quan tâm ...

Cảm ơn và cổ vũ

Shai

+0

Để rõ ràng, bạn đang nói về Bộ công cụ tiện ích tiêu chuẩn trong Java, phải không? Nếu có, vui lòng thêm thẻ "Java". Hay bạn có nghĩa là một số SWT khác? – Jegschemesch

+0

. nó đã rất tự nhiên với tôi tôi hoàn toàn quên thêm một trong những cơ bản nhất :) –

+0

Cuối cùng, tôi đã giải quyết cho một người nghe hoạt động, bỏ phiếu các trình điều khiển USB DLL mỗi n mili giây. –

Trả lời

0

Java không cung cấp tương tác trực tiếp với các thiết bị và bằng USB. Có một số thư viện của bên thứ ba cho Java cung cấp các tính năng liên quan đến USB (đọc/ghi từ cổng USB). Ví dụ: http://www.icaste.com/ (thương mại)

+0

Tôi không cần kết nối USB - Tôi đang làm điều này bằng cách sử dụng một DLL được cung cấp cùng với thiết bị mà tôi đang kết nối để được bao bọc bởi JNA. Tôi cần nghe tin nhắn OS WM_DEVICE_CHANGED. –

1

EDIT: J-16 SDiZ báo cáo rằng API tồn tại cho Windows quá

Đây là một bài viết rất tốt về Access USB devices from Java applications

Module jUSB mô tả chứa một USBListener vật.

Giao diện được thực hiện bởi các đối tượng muốn giám sát cấu trúc USB. Thứ tự mà các thay đổi này được báo cáo không nhất thiết phải là thứ tự mà các thay đổi được nhìn thấy trong thế giới thực và sự chậm trễ cũng xảy ra.

Youre SWT đối tượng có thể thực hiện nghe này và làm điều gì đó, khi các phương pháp

deviceAdded(Device dev) 

là bắn

+0

Theo như tôi thấy, jUSB không hỗ trợ win32, nền tảng chính mà ứng dụng này sẽ hỗ trợ. –

+0

tôi xin lỗi, quyền của bạn. Nó chỉ hoạt động với Linux. –

0

bình luận của bạn cho Zorglub gợi ý rằng bạn có một số (có lẽ) JNI/JNA mã để gọi bên thứ ba DLL bạn đã đề cập. Tôi giả sử bạn cũng có thể viết trình bao bọc JNI cho API Windows nơi bạn có thể đăng ký để được thông báo về sự kiện _WM_DEVICECHANGE_ mà bạn đã đề cập.

+0

mà có lẽ sẽ là điều đúng đắn để làm, được cung cấp đủ nguồn lực cho sự phát triển này. Thật không may, đây không phải là trường hợp ... Tôi định cư cho một người nghe tích cực cuối cùng. –