2010-11-08 35 views
5

Tôi đang làm việc trong một ứng dụng dành cho máy tính để bàn được tạo bằng java. chúng tôi đang làm việc cho phiên bản windows (để chạy trên cửa sổ O.S.) của ứng dụng. Khi chúng ta chạy ứng dụng của chúng tôi, nó tạo ra một biểu tượng trên khay trên desktop bằng cách sử dụng SystemTray nhưTạo cá thể đơn cho khay hệ thống trong java

SystemTray tray = SystemTray.getSystemTray(); 

tôi đang tạo ra trường hợp duy nhất của khay hệ thống, mà tôi đang tạo ra trong lớp học chính của ứng dụng.

Tôi đang tạo exe cho ứng dụng của mình. Vấn đề của tôi là khi tôi chạy tập tin exe của ứng dụng của tôi, nó tạo ra biểu tượng khay mỗi lần.

Tôi muốn trong ứng dụng của mình chỉ có một biểu tượng khay xuất hiện trên máy tính để bàn và đang chạy dưới dạng dịch vụ. biểu tượng này chỉ nên bị xóa khi ứng dụng được gỡ cài đặt. Nó sẽ chạy dưới dạng dịch vụ trong nền.

Tôi không nhận được bất kỳ cách nào giúp tôi chạy ứng dụng của mình dưới dạng dịch vụ và chỉ nên có một phiên bản chạy trong nền.

Tôi muốn chạy ứng dụng của mình bằng cách tạo biểu tượng khay làm dịch vụ và cần có một cá thể hiện tại. Vui lòng hướng dẫn tôi về vấn đề này.

Cảm ơn tất cả các đề xuất có giá trị của bạn trước.

Trả lời

2

Như Mudassir đã nói, bạn nên thêm một kiểm tra khi bạn bắt đầu chương trình tìm cách tìm một phiên bản ứng dụng đang chạy khác của bạn. Điều này có thể được thực hiện bằng cách tạo một tệp cụ thể khi khởi động và xóa nó khi đóng. Nếu tệp đã có sẵn khi bạn khởi động ứng dụng, điều đó có nghĩa là một phiên bản khác đang chạy. Bạn cũng có thể sử dụng liên lạc giữa các quá trình, nhưng nó sẽ khó hơn một tệp đơn giản.

Đối với phần "dịch vụ", bạn có thể ẩn cửa sổ chính khi khởi động, vì vậy ứng dụng của bạn sẽ chạy như thể đó là dịch vụ cửa sổ.

+0

Cảm ơn bạn đã trả lời, tôi hy vọng điều này sẽ phù hợp với tôi. Xin vui lòng xây dựng một số chi tiết để phục vụ một phần. – Toman

+0

Tôi không nghĩ rằng có thể tạo một dịch vụ Windows trong Java, nghĩa là một dịch vụ có thể tự động chạy lúc khởi động và có thể được quản lý giống như các dịch vụ Windows chuẩn khác. Nhưng bạn có thể làm điều gì đó tương tự bằng cách thêm một mục trong sổ đăng ký (google giống như "cửa sổ tự động khởi động"). Khi chương trình của bạn được khởi chạy, nó sẽ kiểm tra xem một cá thể khác có đang chạy hay không. Nếu không, nó sẽ tạo ra một biểu tượng khay hệ thống như bạn muốn, và ẩn các cửa sổ của nó (nếu nó thực sự sử dụng một số loại GUI). –

1

Làm cho ứng dụng của bạn Đơn lẻ. Và vui lòng cho biết cách bạn tạo tệp .EXE bằng Java?

+0

Cảm ơn bạn đã trả lời Mudassir. Tôi đang tạo exe bằng cách sử dụng trình cài đặt nâng cao. Trình cài đặt nâng cao sử dụng các tệp jar và tạo exe từ jar. – Toman

1

Để biểu tượng khay xuất hiện, ứng dụng của bạn phải đang chạy. Nếu biểu tượng khay của bạn xuất hiện ở đó hai lần (hoặc nhiều hơn), thì ứng dụng của bạn chạy nhiều lần. Bạn phải tự mình thêm séc.

Bạn không muốn chạy ứng dụng của mình dưới dạng dịch vụ cửa sổ, vì bình thường chúng không có quyền truy cập vào Windows Desktop.

+0

Bạn không muốn chạy ứng dụng của mình dưới dạng dịch vụ cửa sổ, như thường lệ chúng không có quyền truy cập vào Windows Desktop. Có thể Toman đang cố gắng thực hiện một số chương trình chống vi rút chạy trong nền và hiển thị sự hiện diện của chúng thông qua biểu tượng Khay hệ thống. – Mudassir

+0

@Mudassir Trong trường hợp này, anh ta nên tạo ra hai ứng dụng trong số đó. Một cho dịch vụ nền cửa sổ và dịch vụ thứ hai kết nối qua mạng hoặc thiết bị khác. – ZeissS

+0

Cảm ơn nhận xét của bạn. Ứng dụng của tôi là để thực hiện sao lưu trực tuyến. Nó sẽ sao lưu các tệp và các bản cập nhật đã chọn của bạn tự động trên máy chủ, do đó nó yêu cầu nó phải chạy như một dịch vụ trong nền. Tôi đang tạo một cá thể đơn cho khay Hệ thống trong lớp chính của ứng dụng nhưng ứng dụng của tôi không thể xác định xem có bất kỳ cá thể nào đã có mặt hay không. – Toman

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