Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将单词从双击复制到剪贴板_Java_Awt_Clipboard_Awtrobot - Fatal编程技术网

Java 将单词从双击复制到剪贴板

Java 将单词从双击复制到剪贴板,java,awt,clipboard,awtrobot,Java,Awt,Clipboard,Awtrobot,我试图从任何地方复制单词(比如MS word、pdf,而不是从任何java组件),当我双击它时,将其复制到剪贴板上。因此,我使用awt.Robot在双击后将所选单词复制到剪贴板上。复制后,单词将返回。因此,我使用两种方法copy\u From\u Original和copy\u From\u ClipBoard 问题是,当我复制word时,它会显示上一个word的剪贴板内容,而不是当前复制的内容 如果有其他方法可以完成这个过程,请随意说出来 谢谢。对不起,我的英语不好 public class

我试图从任何地方复制单词(比如MS word、pdf,而不是从任何java组件),当我双击它时,将其复制到剪贴板上。因此,我使用
awt.Robot
在双击后将所选单词复制到剪贴板上。复制后,单词将返回。因此,我使用两种方法
copy\u From\u Original
copy\u From\u ClipBoard

问题是,当我复制word时,它会显示上一个word的剪贴板内容,而不是当前复制的内容

如果有其他方法可以完成这个过程,请随意说出来

谢谢。对不起,我的英语不好

public class copyWord {

public static String copy_From_Original() {
    try {
        Robot robot = new Robot();
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_C);
        robot.keyRelease(KeyEvent.VK_C);
        robot.keyRelease(KeyEvent.VK_CONTROL);
    } catch (AWTException ex) {
        Logger.getLogger(copyWord.class.getName()).log(Level.SEVERE, null, ex);
    }
    String word = copy_From_ClipBoard();
    return word;
}

private static String copy_From_ClipBoard() {

    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Clipboard clipboard = toolkit.getSystemClipboard();
    try {
        String result = (String) clipboard.getData(DataFlavor.stringFlavor);
        return result;
    } catch (Exception e) {
        System.out.println("ERROR");
        return null;
    }
} }

不要为此使用机器人。您还没有说明什么类型的组件包含双击文本,但是如果它是JTextField或JTextArea或JTextComponent的任何其他子类,您可以简单地调用

如果是AWT文本字段或文本区域,您可以自己使用将所选内容放置在剪贴板上:

String text = textField.getSelectedText();

Clipboard clipboard = textField.getToolkit().getSystemClipboard();
clipboard.setContents(new StringSelection(text), null);

谢谢你的回答。所选文本不属于任何组件。它来自另一个地方。像word之类的。这就是为什么我使用机器人,这是一个挑战。Java不能真正监视或控制其他应用程序中的活动,这很糟糕。我不需要选择一个单词,只需要复制一个选定的单词。为此,无需控制或监视其他应用程序。只需发送windows普通复制信号并将其抓取到剪贴板。就这么多。机器人会这样做。剪贴板不会因为你的机器人执行Ctrl-C而立即更改。至少,你应该使用Ctrl-C包装任何后续读取的剪贴板内容。您可能还需要延迟读取,但不幸的是,任何延迟都是试探性的和任意的,因此不完全可靠。是的,您是对的,谢谢您的帮助。我使用线程。睡眠(500);现在它起作用了。