2009-01-28 10 views

Trả lời

12

Tôi không biết liệu nó có áp dụng cho các phiên bản Windows mới hơn hay không, nhưng phương thức .toFront() được sử dụng để flash cửa sổ nếu không có cửa sổ VM nào hiện tại ở nền trước.

này có nghĩa là kêu gọi frame.toFront() trên một khung giảm thiểu sẽ luôn luôn làm cho nó nhấp nháy ...

+5

Có một nhược điểm để phương pháp này. Ví dụ: nếu người dùng ở trong ứng dụng, nhập vào JTextArea, chức năng này sẽ xóa tiêu điểm và làm gián đoạn quá trình nhập. –

0

Sử dụng Swing mỗi lần, bạn rất có thể không thể; đó là một điều cụ thể của Widnows.

+0

Uh và? Thanh tác vụ Windows vẫn là cửa sổ cụ thể. –

1

Bạn có thể lực hạn chế tối đa giao diện của bạn và .toFront -en nó:

 Gui.frame.setState(Frame.ICONIFIED); 
     for (int i = 0; i < 3; i++) { 
      Thread.sleep(10); 
      Gui.frame.toFront(); 
      Thread.sleep(10); 
      Gui.frame.setVisible(false); 
      Thread.sleep(10); 
      Gui.frame.toBack(); 
      Thread.sleep(10); 
      Gui.frame.setVisible(true); 
     } 
     // be creative!! 

mà buồn bã sẽ loại bỏ các tập trung từ cửa sổ hoạt động. Bạn có thể tìm ra cửa sổ đang hoạt động và kích hoạt lại nó sau đó. Nhưng vẫn còn, nhấp nháy sẽ chỉ kéo dài khoảng ba giây.

... hoặc tìm đến gốc thực sự của vấn đề bằng cách sử dụng DLL -call trên FlashWindow. Không thể gọi các dll bằng mã Java sạch, bạn sẽ cần sự trợ giúp của các ngôn ngữ lập trình khác, ví dụ: với JNA. Ngoài ra, bạn cũng có thể viết chương trình của riêng bạn bằng ngôn ngữ khác và gọi nó từ ứng dụng Java của bạn. Tôi sẽ đưa ra một ví dụ trong AutoHotkey dưới đây:

AutoHotkey Code:

if 0 != 1  ; note: in ahk, 1 corresponds args[1] and 0 corresponds args.length 
    { 
     msgbox, There needs to be ONE parameter passed over to this file, which is the name of the window that should be flashed. 
     ExitApp 
    } 
    programName = %1% 
    winget, hWnd, ID, %programName% 
    DllCall("FlashWindow",UInt,hWnd,Int,True) 

biên dịch vào một tập tin gọi là flash.exe, đưa vào thư mục làm việc Java của bạn, bạn có thể gọi nó từ bất kỳ chức năng:

Runtime.getRuntime().exec("./flash.exe \"" + MyJFrame.getTitle() + "\""); 

Ngoài ra, người ta có thể sử dụng AutoHotkey.dll và truy cập nó trong Javacode (có hướng dẫn về cách thực hiện trên internet), vì vậy sẽ không cần bất kỳ tệp exe bên ngoài nào.

Nếu bạn vẫn gặp sự cố khi đạt được nhấp nháy trong thanh tác vụ của cửa sổ, vui lòng cho tôi biết!

0

Cách tốt nhất để làm điều này:

if (!isFocused()) { 
     setVisible(false); 
     setVisible(true); 
    }