Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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
Robot类java,键入字符串问题_Java_Swing_Awt_Awtrobot - Fatal编程技术网

Robot类java,键入字符串问题

Robot类java,键入字符串问题,java,swing,awt,awtrobot,Java,Swing,Awt,Awtrobot,我使用下面的循环,但它只键入第一个字符,其余的都是数字,知道吗 import java.awt.*; import javax.swing.KeyStroke; public class test { public static void main(String[] args) throws AWTException { Robot r = new Robot(); String s = "Face"; for (int

我使用下面的循环,但它只键入第一个字符,其余的都是数字,知道吗

import java.awt.*;

import javax.swing.KeyStroke;

public class test {

    public static void main(String[] args) throws AWTException
    {
        Robot r = new Robot();

        String s = "Face";

        for (int i = 0; i < s.length(); i++) 
        {
            char res = s.charAt(i);
            r.keyPress(res);
            r.keyRelease(res);  
            r.delay(1000);
        }           
    }
}
import java.awt.*;
导入javax.swing.KeyStroke;
公开课考试{
公共静态void main(字符串[]args)引发AWTException
{
机器人r=新机器人();
字符串s=“面”;
对于(int i=0;i
输出类型:F135


keyPress/Release方法需要一个表示要键入的字符的int值。这些值是由KeyEvent.VK_254;确定的每个字符的键代码???变量

尝试:

然而,即使这样也不能适用于所有角色。例如,在我的键盘上,“%”位于“5”之上。您不能使用VK_百分比。需要的关键冲程是VK_5和换档。没有办法知道键盘的实际映射以自动执行此操作


所以机器人并不是一个好方法。

机器人类使用此处定义的键代码,而不是原始字符。你需要这样称呼它:

r.keyPress(KeyEvent.VK_A);
r.keyRelease(KeyEvent.VK_A);

@camickr我对你的scipt做了一个小编辑,以容纳一个字符串而不是一个字母。请在下面找到。它帮助我感谢:)函数调用:
typeCharacter(机器人,“谢谢”)

公共静态void类型字符(机器人,字符串字母)
{

对于(int i=0;i,您还可以将字符串加载到剪贴板,并将其粘贴到任何需要的位置

                StringSelection selection = new StringSelection("Hello World");
                Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
                clipboard.setContents(selection, selection);

                robo.keyPress(KeyEvent.VK_CONTROL);
                robo.keyPress(KeyEvent.VK_V);
                robo.keyRelease(KeyEvent.VK_V);
                robo.keyRelease(KeyEvent.VK_CONTROL);

如果您创建了一个接收要键入的字符串的函数,您的生活将变得轻松:

public void keyboardString(final String text) {
    if (text != null) {
        try {
            final Robot robot = new Robot();
            for (int i = 0; i < text.length(); i++) {
                final char ch = text.charAt(i);
                final boolean upperCase = Character.isUpperCase(ch);
                final int keyCode = KeyEvent.getExtendedKeyCodeForChar(ch);
                robot.delay(10);
                if (upperCase) {
                    robot.keyPress(KeyEvent.VK_SHIFT);
                }
                robot.keyPress(keyCode);
                robot.keyRelease(keyCode);
                if (upperCase) {
                    robot.keyRelease(KeyEvent.VK_SHIFT);
                }
            }

        } catch (final Exception e) {
            System.out.println(e);
        }
    }
}
public void键盘字符串(最终字符串文本){
如果(文本!=null){
试一试{
最终机器人=新机器人();
对于(int i=0;i
an我们看到robot的代码了吗?你能给我们看一下程序输出吗?另外,你不应该在for循环中使用i++而不是++i吗?另外,你不需要使用char[]c=s.tocharray();因为你在字符串var s上使用charAt(i)。你可以使用s.length()获得循环的长度“也是。”布里斯勒是这样做的,但同样的做法可能会有所帮助。
                StringSelection selection = new StringSelection("Hello World");
                Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
                clipboard.setContents(selection, selection);

                robo.keyPress(KeyEvent.VK_CONTROL);
                robo.keyPress(KeyEvent.VK_V);
                robo.keyRelease(KeyEvent.VK_V);
                robo.keyRelease(KeyEvent.VK_CONTROL);
public void keyboardString(final String text) {
    if (text != null) {
        try {
            final Robot robot = new Robot();
            for (int i = 0; i < text.length(); i++) {
                final char ch = text.charAt(i);
                final boolean upperCase = Character.isUpperCase(ch);
                final int keyCode = KeyEvent.getExtendedKeyCodeForChar(ch);
                robot.delay(10);
                if (upperCase) {
                    robot.keyPress(KeyEvent.VK_SHIFT);
                }
                robot.keyPress(keyCode);
                robot.keyRelease(keyCode);
                if (upperCase) {
                    robot.keyRelease(KeyEvent.VK_SHIFT);
                }
            }

        } catch (final Exception e) {
            System.out.println(e);
        }
    }
}