2010-01-07 18 views
25

Windows XP có giới hạn 10000 người dùng xử lý cho mỗi quá trình và tổng 32000 cho mỗi phiên máy tính để bàn. Tuy nhiên, khi tôi chạy 4 hoặc 5 quá trình SWT, mỗi tiêu thụ không quá 2000 người dùng xử lý, các SWT No More xử lý ngoại lệ sẽ luôn luôn được ném.SWT Không có thêm Handles

Có ai biết tại sao không?

Trả lời

42

Nếu tôi hiểu bạn một cách chính xác, bạn có lẽ nhận được ngoại lệ sau đây:

org.eclipse.swt.SWTError: No more handles 

Bạn có thể tạo ra nguồn lực (như Font, Image hoặc GC đối tượng) mà bạn không xử lý một cách chính xác. Bạn có thể dành chút thời gian để đọc qua hướng dẫn SWT trên Managing Operating System Resources.

Để xác định xem đây có phải là trường hợp hay không, tôi có thể đề xuất bài viết hữu ích này: Diagnosing Handle Leaks in SWT/RCP Windows Applications, giải thích tài nguyên là gì và đề xuất sử dụng Process Explorer hoặc DPus để xác định vị trí rò rỉ.

Một đồng nghiệp cũng khuyên bạn nên Sleak, một ứng dụng tập trung vào SWT có thể thực sự thông báo cho bạn tài nguyên nào còn lại trong bộ nhớ còn lại.

Để hiểu rõ về cách xử lý SWT, this Sybase article describes có ba loại: đối tượng người dùng, đối tượng GDI hoặc đối tượng Kernel Object, mỗi đối tượng có tối đa riêng.

2

Giới hạn không phải là 10.000 tay cầm. Các ứng dụng có thể sử dụng hơn 10.000 tay cầm (nếu RAM cho phép). Giới hạn là trên GDI và tài nguyên người dùng (phần tử đồ họa).

Loại tài nguyên nào là các ứng dụng SWT sử dụng (bạn có thể thấy điều này bằng taskmgr)? Điều đó sẽ giúp hiểu được những gì đang bị rò rỉ.

7

Bạn có một số loại rò rỉ tài nguyên trong chương trình của bạn nhiều khả năng nhất. Sử dụng tiện ích sau (http://www.eclipse.org/articles/swt-design-2/sleak.htm) như một cách dễ dàng để tìm rò rỉ tài nguyên swt. Tôi đã sử dụng nó để làm sạch toàn bộ các vấn đề trong ứng dụng rcp Tôi đang làm việc trên

1

Để ghi lại, nếu đây là câu hỏi của tôi, tôi đã chấp nhận câu trả lời của @ Paul. Tuy nhiên, có một vấn đề lén lút mà tôi muốn thêm vào đây để có thể giúp đỡ người khác nếu họ gặp phải vấn đề này ...

Kiểm tra việc sử dụng phông chữ của bạn.

Trong trường hợp của tôi, tay cầm của tôi không cao lắm, nhưng thay vào đó tôi đã tạo mới các thể hiện phông chữ và đưa chúng theo kiểu Kiểu chữ. Tôi đã phải thay vào đó tuyên bố các phông chữ tôi muốn sử dụng một lần, cấp lớp. CÁi này đã sửa nó giúp tôi.

1

Tôi đã nhìn thấy lỗi này quá trong nhật thực 3.6 SR1, hóa ra là do hàng trăm tab trình soạn thảo bị mở. Đóng các tab đã sửa lỗi.

0

Hãy thử theo các bước:

  • đi làm lu mờ thư mục chính (nơi bạn cài đặt eclipse), sau đó đi đến thư mục plugins
  • loại bỏ tất cả các plugin cài đặt thời gian gần đây bắt đầu với com.google *
  • . hãy thử khởi động lại nhật thực của bạn một lần nữa, nó có thể bắt đầu hoạt động trở lại (làm việc cho tôi.)
  • thử cài đặt các plugin cũ từ google hoặc chỉ một lần bạn cần. (Tôi sẽ thử điều này.)
0

Trên hệ thống của tôi Windows7 x64 Tôi có thể tạo lại khi TeamViewer 8 đang chạy (www.teamviewer.com). Khi tôi dừng TeamViewer, lỗi sẽ biến mất.

bạn có thể xem xét: https://bugs.eclipse.org/bugs/show_bug.cgi?id=402983

Hy vọng điều đó sẽ hữu ích.

0

Tôi cũng đã gặp sự cố này, nhưng bây giờ tôi đã giải quyết nó.

Trong trường hợp của tôi, tôi đang chạy Win7 với SP1 và Spring Tool Suite 3.7.2 (Eclipse Mars 4.5.1) thông qua Citrix XenApp. Lỗi này xảy ra khi tôi chuyển đổi giữa Trình khám phá góiTrình chỉnh sửa Java.

Giải pháp của tôi:
chạy dịch vụ.msc trong Win7, tìm "Dịch vụ đầu vào máy tính bảng", dừng lại.

Hy vọng điều này có thể giúp người khác.