Возможно ли быть сообщено, когда содержимое буфера обмена изменяется вне java

То, что я хотел бы сделать, это то, что когда пользователь копирует текст в любую программу (firefox, блокнот, pdfReader и т.д.), мое уже запущенное Java-приложение должно быть проинформировано и сразу же отображает всплывающее окно.

Я думаю, чтобы это сделать, мое приложение Java должно быть вызвано всякий раз, когда изменяется системный буфер обмена.

Возможно ли это с помощью java, если да, в какой версии? Я знаю, что мы можем достичь и управлять содержимым системного буфера обмена, но мой конкретный вопрос заключается в вызове приложения java. при изменении содержимого буфера обмена.

Спасибо

Ответы

Ответ 1

Я бы наивно притворился, что это работа для JDIC, ​​но interwebz сказал мне правду. Итак, позвольте мне немного пояснить.

используя Toolkit.getSystemClipboard(), вы можете получить доступ к собственному системному буферу. Как и любой объект Java, этот буфер можно прослушать. Точно вы можете вызвать Clipboard.addFlavorListener(...), чтобы прослушать FlavorEvents. Кто они такие? Они металлические короли!.... нет, нет, я полностью и полностью отвлекся. Позволь мне вернуться. Итак, FlavorEvent, согласно документу, указывает, что

что доступные DataFlavors изменились в буфере обмена (источник события).

Какой может означает, что содержимое буфера обмена изменилось. Тем не менее, я бы не пошел прямо на него без первого прототипа.

EDIT Пример прототипа из пальцев AlexR

import java.awt.Toolkit;
import java.awt.datatransfer.FlavorEvent;
import java.awt.datatransfer.FlavorListener;

public class Main {
    public static void main(String[] args) throws Exception { 
        Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(new FlavorListener() { 
            @Override 
            public void flavorsChanged(FlavorEvent e) { 
                System.out.println("changed!!! " + e.getSource() + " " + e.toString()); 
            } 
        }); 
        Thread.sleep(100000L); 
    }
}