Интересно у кого-то есть любая идея, как решить это:
В моем Java плагин Eclipse там является некоторыми процессами, которые занимают время. Поэтому пользователь мог бы минимизировать окно и позволить процессу, выполненному в фоновом режиме.
Теперь, когда процесс закончен, я могу вынудить окно прибыть в вершину снова, но это нет - нет в удобстве использования. Я хотел бы, чтобы процесс мигнул в панели задач вместо этого. Там какой-либо путь состоит в том, чтобы достигнуть этого?
Я взглянул на org.eclipse.jface.window, но could'nt находят что-либо как этот, то же идет для документации SWT...
Другая вещь, которая стала по моему мнению - людьми, использует это приложение на Mac OS X и Linux также, есть ли платформа независимое решение, которое сообщит пользователю, что процесс закончился, но не принося окно к вершине?
Любые идеи очень приветствуются!
Править:
Я узнал, что на окнах пользователь может корректироваться, хотел ли бы он включить силу к переднему плану или нет. Если та опция будет отключена, то задача просто мигнет в панели задач...
Вот хорошее чтение на этом...
Если кто-либо, возможно, знает о некоторой платформе независимый способ достигнуть этого вида поведения, поделитесь своими знаниями со мной!
Я не думаю, что есть независимый от платформы способ сделать это. Вам нужно будет взглянуть на вызовы API для конкретной платформы и реализовать их через JNI или JNA.
Вот фрагмент одного из моих приложений для Windows:
public static void flashWindow(final Shell shell, boolean flashTray,
boolean flashWindow) {
try {
if (isActiveWindow(shell)) {
flashWindow = false;
flashTray = false;
}
User32 lib = (User32) getLibrary("user32", User32.class);
User32.FLASHWINFO flash = new User32.FLASHWINFO();
flash.hWnd = new W32API.HANDLE(new W32API.UINT_PTR(shell.handle)
.toPointer());
flash.uCount = 2;
flash.dwTimeout = 1000;
if (flashTray || flashWindow) {
flash.dwFlags = (flashTray ? User32.FLASHW_TRAY : 0)
| (flashWindow ? User32.FLASHW_CAPTION : 0);
} else {
flash.dwFlags = User32.FLASHW_STOP;
}
flash.cbSize = flash.size();
if (lib.FlashWindowEx(flash) && !flashWindow) {
final FocusListener focusListener = new FocusListener() {
public void focusGained(FocusEvent arg0) {
flashWindow(shell, false, false);
shell.removeFocusListener(this);
}
public void focusLost(FocusEvent arg0) {
}
};
shell.addFocusListener(focusListener);
}
} catch (UnsatisfiedLinkError e) {
}
}
Вот упрощенная версия getLibrary ()
:
protected static StdCallLibrary getLibrary(String libraryName,
Class<?> interfaceClass) throws UnsatisfiedLinkError {
try {
StdCallLibrary lib = (StdCallLibrary) Native.loadLibrary(libraryName,
interfaceClass);
return lib;
} catch (UnsatisfiedLinkError e) {
Logger.out.error("Could not load " + libraryName + " library.");
throw e;
}
}
Позаботьтесь о том, чтобы dispose ()
библиотека, когда вы закончите с ней.
Что вы могли бы сделать, чтобы привлечь внимание пользователей, не раздражая, так это изменить текст окна, это можно сделать простым:
shellName.setText("task 20% complete")
это позволит пользователю получать обновления, свернув окно, а затем добавить фокус слушатель, чтобы вернуть окно к его нормальному тексту, когда фокус будет восстановлен. Это позволит минимизировать вмешательство при информировании пользователя.
У меня была аналогичная проблема с моим плагином.
В итоге я создал маленький значок для моей программы в доке нижнего статуса (или как там это называется внизу). В зависимости от завершения процессов и других фоновых событий мой значок меняет цвет и мигает (например, меняет цвет с серого на зеленый после завершения первоначальной настройки).
Сделав двойной щелчок или щелчок правой кнопкой мыши по этому значку с учетом контекста, я могу делать такие вещи, как открытие соответствующего окна.
Ну, это не совсем так, но, начиная с Eclipse 3.6 M6, вы можете накладывать текст, изображение или индикатор выполнения на TaskItem независимым от платформы способом с помощью SWT. См. Новые и важные и SWT-фрагменты .