/** * $RCSfile: ,v $ * $Revision: $ * $Date: $ * * Copyright (C) 2004-2011 Jive Software. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jivesoftware.spark.plugin.flashing; import java.awt.FlowLayout; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.HashMap; import javax.swing.JButton; import javax.swing.JFrame; import org.jivesoftware.spark.PluginManager; public class FlashWindow { private HashMap<Window, Thread> flashings = new HashMap<Window, Thread>(); static { boolean is64bit = System.getProperty("sun.arch.data.model").equals("64"); String arch = ""; if (is64bit) { arch = "64"; } try { System.load(PluginManager.PLUGINS_DIRECTORY + File.separator + "flashing" + File.separator + "lib" + File.separator + "FlashWindow" + arch + ".dll"); } catch (UnsatisfiedLinkError e) { // So, we are on 64bit using 64bit java and you rather wand a 32bit.dll ?? suuuureeee.... if (e.getMessage().contains("Can't load AMD 64-bit .dll on a IA 32-bit platform")) { System.load(PluginManager.PLUGINS_DIRECTORY + File.separator + "flashing" + File.separator + "lib" + File.separator + "FlashWindow.dll"); } else { e.printStackTrace(); } } // System.load("C:\\PATH\FlashWindow"+s+".dll"); } public native void flash(String name, boolean bool); /* * @param frame The JFrame to be flashed * @param intratime The amount of time between the on and off states of a * single flash * @param intertime The amount of time between different flashes * @param count The number of times to flash the window */ public void flash(final Window window, final int intratime, final int count) { new Thread(new Runnable() { public void run() { try { if (window instanceof JFrame) { // flash on and off each time for (int i = 0; i < count; i++) { flash(((JFrame) window).getTitle(), true); Thread.sleep(intratime); } // turn the flash off flash(((JFrame) window).getTitle(), false); } } catch (Exception ex) { // System.out.println(ex.getMessage()); } } }).start(); } public void startFlashing(final Window window) { if (flashings.get(window) == null) { Thread t = new Thread() { public void run() { try { while (true) { Thread.sleep(1500); // System.out.println("Flash Window"); if (window instanceof JFrame) flash(((JFrame) window).getTitle(), true); } } catch (Exception ex) { flash(((JFrame) window).getTitle(), false); // System.out.println(ex.getMessage()); } } }; t.start(); flashings.put(window, t); } } public void stopFlashing(final Window window) { if (flashings.get(window) != null) { flashings.get(window).interrupt(); flashings.remove(window); } } public static void main(String[] args) throws Exception { final JFrame frame = new JFrame(); frame.setTitle("Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(new FlowLayout()); JButton button = new JButton("Temp Flashing"); frame.getContentPane().add(button); final FlashWindow winutil = new FlashWindow(); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { winutil.flash(frame, 750, 5); } }); JButton startButton = new JButton("Start Flashing"); frame.getContentPane().add(startButton); startButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { winutil.startFlashing(frame); } }); JButton stopButton = new JButton("Stop Flashing"); frame.getContentPane().add(stopButton); stopButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { // winutil.flash(frame,750,1500,5); winutil.stopFlashing(frame); } }); frame.pack(); frame.setVisible(true); } }