2012-05-08 37 views
7

Tôi có một ứng dụng java được xây dựng chủ yếu cho Mac. Tôi cần có thể thực hiện một trong ba điều sau:Bạn có thể phát hiện Mac Spaces trong Java không?

  1. Ứng dụng của tôi luôn tuân thủ theo không gian hiện tại. Có nghĩa là, nếu tôi đang ở trên Desktop 2 và khởi động ứng dụng của mình, thì tôi chuyển sang Desktop 3, sau đó ứng dụng của tôi sẽ hiển thị trên Desktop 3 một cách tự động. Điều này tương đương với việc nhấp chuột phải vào biểu tượng ứng dụng trong thanh công cụ, chọn Tùy chọn, sau đó chọn Tất cả máy tính để bàn. Nếu tôi bằng cách nào đó có thể làm cho điều này là hành vi mặc định cho ứng dụng của tôi, mà không yêu cầu hành động của người dùng, thì điều đó sẽ tuyệt vời!

  2. Chụp màn hình của một không gian cụ thể. Tôi hiện đang sử dụng lớp Robot để chụp ảnh màn hình. Nếu có một cách tôi có thể chỉ định không gian để chụp, không chỉ là không gian hiện tại, thì điều đó sẽ rất tuyệt vời!

  3. Ít nhất có thể phát hiện nếu rời khỏi không gian hiện tại.

Tôi bắt đầu nghiêng về phía không phải một trong số này là có thể. Nhưng nếu bạn có thể đưa ra bất kỳ trợ giúp nào, hoặc cách giải quyết có thể xảy ra, điều đó thật tuyệt vời!

Tôi cũng đã chơi xung quanh với GraphicsEnvironment, GraphicsDevice, GraphicsConfiguration, nhưng không có may mắn. Nó không trả về bất kỳ thông tin nào về máy tính để bàn ảo của Mac (Spaces).

Điều gì cũng khiến mọi thứ trở nên khó khăn là tôi đang cố gắng tránh sử dụng mã nền tảng cụ thể bằng mọi giá! Tôi biết tôi có thể sử dụng JNI để thực hiện điều này, hoặc có thể có một cái gì đó trong phần mở rộng java-apple. Nhưng hiện tại, tôi sử dụng một chi nhánh mã duy nhất và xây dựng cho cả Mac & Windows. Tôi đang cố gắng tránh có hai bản dựng riêng biệt và nhị phân cho cả hai nền tảng.

+0

Bạn không cần tạo các bản dựng riêng - bạn chỉ cần một số phát hiện nền tảng và logic điều kiện (cộng với mã gốc của bạn). Bạn, sau khi tất cả, tìm cách để làm một cái gì đó * là * rất nền tảng cụ thể. EDIT: trên thực tế, Drizzt321 đã nói điều này để đáp ứng với câu trả lời của Gray. –

Trả lời

3

Câu trả lời là "không" trừ khi bạn đang viết mã gốc và sử dụng JNI. Một trong những tính năng thiết kế chính của Java là nó là hệ điều hành bất khả tri. Những gì bạn đang yêu cầu là cực kỳ Đặc trưng của Mac OS X. Tôi thấy không có gì trong phần mở rộng Java của Apple giúp.

+2

Những gì Gray nói, chỉ có điều bạn có thể làm là có một đường dẫn mã phân nhánh, nơi bạn kiểm tra xem bạn có đang chạy trên OS X không, nếu chạy mã JNI này, nếu không thì hãy làm mã JNI của Windows (hoặc không có gì). – Drizzt321

+0

Cảm ơn bạn đã phản hồi, tôi chắc chắn đây là câu trả lời đúng, chỉ muốn xác nhận. Tôi đã hy vọng java sẽ xử lý không gian giống như một môi trường đa thiết bị đồ họa và bạn có thể truy cập từng thiết bị đồ họa riêng biệt. –

+0

Tôi đoán rằng bạn vừa xác minh sự thật. Vâng, mã người dùng Java có ít kiến ​​thức về "thiết bị đồ họa" mà nó đang hiển thị trên đó. JRE được thiết kế để bảo vệ người dùng khỏi những kiến ​​thức đó. May mắn nhất. – Gray

2

Không, theo như tôi biết, Java không có bất kỳ hỗ trợ đặc biệt nào cho Spaces, vì vậy bạn sẽ cần phải sử dụng mã gốc cụ thể cho nền tảng. Tuy nhiên, JNI - với tất cả sự xấu xa của nó - không phải là lựa chọn duy nhất của bạn. Thay vào đó, bạn có thể sử dụng JNA, tính năng này thân thiện hơn với nhiều lập trình viên và dễ gỡ lỗi hơn rất nhiều.

Trong ứng dụng của bạn, bạn có thể phát hiện nền tảng. Nếu đó là một nền tảng mà bạn đã viết mã nền tảng cụ thể, bạn có thể thực thi mã đó. Nếu không, bạn có thể quay trở lại thực hiện Java mặc định, thuần túy.

+0

Cảm ơn bạn đã đề xuất JNA. –

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