# String und Robot



## unknown_member (31. Jul 2007)

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


----------



## Leroy42 (31. Jul 2007)

unknown_member hat gesagt.:
			
		

> Mein Problem ist, dass der String sich verändern kann.


Wenn das dein einziges Problem ist, brauchst du 
dir keine Gedanken machen. Strings sind _immutable_
also *unveränderbar*!


----------



## unknown_member (31. Jul 2007)

Nein, nein, ich meine, dass der String nicht immer gleich ist. Er wird anfangs vom User eingegeben.


----------



## Xams (31. Jul 2007)

Kopier den String in eine char Array und lauf dann über dieses.

```
for(int i = 0; i < meinstring.lenght;++i){

rob.keyPress( meinstring[i] ); 
rob.keyRelease( meinstring[i]); 
}
```
Ungeprüft...


----------



## Leroy42 (31. Jul 2007)

unknown_member hat gesagt.:
			
		

> Nein, nein, ich meine, dass der String nicht immer gleich ist.



Strings sind *immer* gleich!



			
				unknown_member hat gesagt.:
			
		

> Er wird anfangs vom User eingegeben.



Eben! Und nach der Eingabe, kann er nicht mehr verändert werden.


----------



## Marco13 (31. Jul 2007)

Naja sinngemäß ungefähr so:


```
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.


----------



## Xams (31. Jul 2007)

charAt ist ungünstig, kopier am besten in ein Array...


----------



## SlaterB (31. Jul 2007)

Leroy42 hat gesagt.:
			
		

> unknown_member hat gesagt.:
> 
> 
> 
> ...


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


----------



## Leroy42 (31. Jul 2007)

SlaterB hat gesagt.:
			
		

> man kann es auch übertrieben genau machen, der Witz ist langsam raus



Okay, ich geb's zu: Ich war durch die Fragestellung etwas gefrustet.


----------



## Marco13 (31. Jul 2007)

Java-Freak hat gesagt.:
			
		

> charAt ist ungünstig, kopier am besten in ein Array...



Warum? 


```
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:


----------



## unknown_member (31. Jul 2007)

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:


----------



## The_S (1. Aug 2007)

@unknown

was verstehst du denn daran net

@Al-Lie-Roy

Hast nen Kniebohrer zum Geb bekommen wat?


----------



## unknown_member (1. Aug 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> @unknown
> 
> was verstehst du denn daran net




Ähm... Wo hab ich geschrieben, dass ich etwas nicht versteh? 

Ich weiß bloß nicht, wie ich das mit der Groß- und Kleinschreibung machen kann


----------



## The_S (1. Aug 2007)

Ja und das wollte ich wissen, was du an dem Beispiel nicht verstehst. Marco hats doch schon geschrieben ...


----------



## unknown_member (1. Aug 2007)

Meinst du bei diesem


```
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:


```
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
```


----------



## The_S (1. Aug 2007)

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.


----------



## Marco13 (1. Aug 2007)

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

```
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);
            }
        }
    }
}
```


----------



## unknown_member (1. Aug 2007)

Wenn ich das so anpasse wie ich es will, dann kommt bei mir diese Exception:


```
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)
```


----------



## Marco13 (1. Aug 2007)

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.... )


----------



## unknown_member (1. Aug 2007)

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:


----------

