String und Robot

Status
Nicht offen für weitere Antworten.

unknown_member

Bekanntes Mitglied
Hallo!

Also, ich habe einen String und möchte diesen per Robot irgendwo anders wieder ausgeben. Mein Problem ist, dass der String sich verändern kann.
Wie kann ich ihn dann per Robot Zeichen für Zeichen "drücken lassen"?


Danke für jede Antwort,
unknown_member
 
Kopier den String in eine char Array und lauf dann über dieses.
Code:
for(int i = 0; i < meinstring.lenght;++i){

rob.keyPress( meinstring[i] ); 
rob.keyRelease( meinstring[i]); 
}
Ungeprüft...
 
Naja sinngemäß ungefähr so:

Code:
String string = der String eben....
string = string.toUpperCase();
for (int i=0; i<string.length(); i++)
{
    char c = string.charAt(i);
    robot.keyPress(c);
    robot.keyRelease(c);
}
Das funktioniert "zufällig", weil die keyCodes, die Dort angegeben sind, genau die ASCII-Zeichen des (groß geschriebenen) Characters sind. Wenn du zusätzlich noch Groß-Kleinschreibung unterscheiden willst, musst du ggf. noch ein
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyRelease(KeyEvent.VK_SHIFT);
drum machen. Zahlen sollten so auch funktionieren. Sonderzeichen könnten eklig werden.
 
Leroy42 hat gesagt.:
unknown_member hat gesagt.:
Nein, nein, ich meine, dass der String nicht immer gleich ist.

Strings sind immer gleich!
man kann es auch übertrieben genau machen, der Witz ist langsam raus 😉

der String wird nicht 'verändert' sondern durch einen anderen ersetzt,


dass der String nicht immer gleich ist
=
dass das referenzierte String-Objekt nicht immer das selbe ist
 
Java-Freak hat gesagt.:
charAt ist ungünstig, kopier am besten in ein Array...

Warum?

Code:
    public char charAt(int index) {
        if ((index < 0) || (index >= count)) {
            throw new StringIndexOutOfBoundsException(index);
        }
        return value[index + offset];
    }
Du kannst davon ausgehen, dass das ganze NICHT zeitkritisch ist :wink:
 
Danke! Mit diesen Tipps hats geklappt!

Nur leider weiß ich nicht, wie ich das mit der Groß- und Kleinschreibung machen kann...

Sorry für die Fragenstellung :wink:
 
@unknown

was verstehst du denn daran net

@Al-Lie-Roy

Hast nen Kniebohrer zum Geb bekommen wat? 😉
 
Ja und das wollte ich wissen, was du an dem Beispiel nicht verstehst. Marco hats doch schon geschrieben ...
 
Meinst du bei diesem

Code:
String string = der String eben....
string = string.toUpperCase();
for (int i=0; i<string.length(); i++)
{
    char c = string.charAt(i);
    robot.keyPress(c);
    robot.keyRelease(c);
}


Beispiel?

Bei dem wird da nicht unterschieden, ob groß oder klein.


Das zweite Beispiel funktioniert bei mir nicht:

Code:
xxx.java:120:38: cannot find symbol
symbol  : variable count
location: class xxx
        if ((index < 0) || (index >= count)) {
                                                       ^
xxx.java:123:16: cannot find symbol
symbol  : variable value
location: class xxx
        return value[index + offset];
                    ^
xxx.java:123:30: cannot find symbol
symbol  : variable offset
location: class xxx
        return value[index + offset];
                                                ^
xxx.java:123:22: operator + cannot be applied to int,offset
        return value[index + offset];
                               ^
xxx.java:123:28: incompatible types
found   : <nulltype>
required: int
        return value[index + offset];
                                            ^
5 errors
 
Marco13 hat gesagt.:
Wenn du zusätzlich noch Groß-Kleinschreibung unterscheiden willst, musst du ggf. noch ein
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyRelease(KeyEvent.VK_SHIFT);
drum machen. Zahlen sollten so auch funktionieren. Sonderzeichen könnten eklig werden.
 
Eigentlich hatte ich da schon genau dazu gesagt. *weiterkommentareverkneif*

Das Programm startet notepad, wartet eine Sekunde (in der Hoffnung, dass Notpad bis dahin gestartet ist :roll: ), und schreibt dann einen Satz mit Groß- und Kleinschreibung
Code:
import java.awt.*;
import java.awt.event.*;

class RobotTest
{
    public static void main(String args[])
    {
        new RobotTest();
    }

    private Robot robot;

    public RobotTest()
    {
        try
        {
            robot = new Robot();
            Runtime.getRuntime().exec("notepad.exe");
            Thread.sleep(1000);
            type("Mit GROSS und kleinschreibung");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public void type(String string)
    {
        for (int i=0; i<string.length(); i++)
        {
            char c = string.charAt(i);
            int code = Character.toUpperCase(c);
            if (Character.isUpperCase(c))
            {
                robot.keyPress(KeyEvent.VK_SHIFT);
                robot.keyPress(code);
                robot.keyRelease(code);
                robot.keyRelease(KeyEvent.VK_SHIFT);
            }
            else
            {
                robot.keyPress(code);
                robot.keyRelease(code);
            }
        }
    }
}
 
Wenn ich das so anpasse wie ich es will, dann kommt bei mir diese Exception:

Code:
java.lang.NullPointerException
 at xxx.type(xxx.java:261)
 at xxx.start(xxx.java:129)
 at xxx.actionPerformed(xxx.java:232)
 at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
 at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
 at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
 at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
 at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
 at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)
 at java.awt.Component.processMouseEvent(Component.java:5488)
 at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
 at java.awt.Component.processEvent(Component.java:5253)
 at java.awt.Container.processEvent(Container.java:1966)
 at java.awt.Component.dispatchEventImpl(Component.java:3955)
 at java.awt.Container.dispatchEventImpl(Container.java:2024)
 at java.awt.Component.dispatchEvent(Component.java:3803)
 at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
 at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
 at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
 at java.awt.Container.dispatchEventImpl(Container.java:2010)
 at java.awt.Window.dispatchEventImpl(Window.java:1778)
 at java.awt.Component.dispatchEvent(Component.java:3803)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
 at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
 
Oh, das ist ja schade für dich. (Kein Mensch weiß, was du da machst, aber meine Glaskugel sagt mir, dass der robot null ist - in meinem Beispiel wurde er im Konstruktor erstellt, und bei dir vermutlich ... nirgendwo.... )
 
Danke für deine (nette?) Antwort. :wink:

Ich hab den Robot zwar im Konstruktor dekliniert aber in makeGui() erstellt.

VIELEN VIELEN DANK!!! 😀 😀 😀 :applaus: :applaus: :applaus:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben