{"id":1145,"date":"2011-10-24T16:06:57","date_gmt":"2011-10-24T14:06:57","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/2011\/10\/ein-paar-faqs-teil-3\/"},"modified":"2011-10-24T16:06:57","modified_gmt":"2011-10-24T14:06:57","slug":"ein-paar-faqs-teil-3","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2011\/10\/ein-paar-faqs-teil-3\/","title":{"rendered":"Ein paar (F)AQs, Teil 3"},"content":{"rendered":"<h5><font style=\"font-weight: bold\">Regul\u00e4re Ausdr\u00fccke und Gruppen<\/font><\/h5>\n<p>Um bei einem Pattern wie <code>Pattern pattern = Pattern.compile(\u201c(In)|(present|the)\u201c);<\/code> herauszufinden, ob das gefundene Wort aus der ersten Gruppe (\u201eIn\u201c) oder aus der zweiten Gruppe (\u201epresent|the\u201c) kommt, l\u00e4sst sich <code>group(int)<\/code> verwenden. <\/p>\n<pre>Pattern pattern = Pattern.compile( &quot;(In)|(present|the)&quot; );\n<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">String<\/a> string = &quot;In the present study the cytotoxic activity of aloin&quot;;&#160;&#160; Matcher matcher = pattern.matcher( string );&#160;&#160; while ( matcher.find() )\n{\n <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">System<\/a>.out.println( &quot;Found: &quot; + matcher.group() );&#160;&#160; if ( matcher.group(1) != null )\n  <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">System<\/a>.out.println( &quot;\\tGruppe *1*&quot; );\n else if ( matcher.group(2) != null )\n  <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">System<\/a>.out.println( &quot;\\tGruppe *2*&quot; );&#160;&#160; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">System<\/a>.out.println( &quot;\\tStart At: &quot; + matcher.start() );\n <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">System<\/a>.out.println( &quot;\\tEnd At: &quot; + matcher.end() );\n <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">System<\/a>.out.println( &quot;\\tGroupID: &quot; + &quot;???&quot; );<\/pre>\n<pre>}<\/pre>\n<p><strong>BIG_ENDIAN oder LITTLE_ENDIAN?<\/strong><\/p>\n<p>In verschiedenen Programmen wird zwischen BIG_ENDIAN und LITTLE_ENDIAN unterschieden. Unter Java wird alles als in BIG_ENDIAN gespeichert. Sollen die Bytes umgedreht werden, reicht folgendes: <\/p>\n<pre>public class Swap\n{\n  public final static int swapInt( int v )\n  {  \n    return  (v &gt;&gt;&gt; 24) | (v &lt;&lt; 24) | ((v &lt;&lt; 8) &amp; 0x00FF0000) | ((v &gt;&gt; 8) &amp; 0x0000FF00);\n  }&#160;&#160; public static void main( Strings[] args )\n  {\n    \/\/  before 0x01020304  \n    \/\/    after  0x04030201    int v = 0x01020304;  \n    <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">System<\/a>.out.println(&quot;before : 0x&quot; + <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Ainteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">Integer<\/a>.toString(v,16));  \n    <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">System<\/a>.out.println(&quot;after  : 0x&quot; + Ineger.toString(swapInt(v),16));  \n  }  \n}<\/pre>\n<p>Um herauszufinden, ob BIG_ENDIAN oder LITTLE_ENDIAN darunterliegt, w\u00fcrde ich die Architektur aus den Properties auslesen und dann absch\u00e4tzen. <\/p>\n<p><strong>Wie kann man eine neue JVM aus einem Java-Programm starten?<\/strong><\/p>\n<p>Man kann eine neue VM aus einem Java-Programm starten, und der dabei nat\u00fcrlich eine Main-Klasse und alle m\u00f6glichen Parameter mitgeben. Alle anderen Dienstprogramme, wie javac, jar, sind reine Java-Programme, die man auch anders nutzen kann, aber f\u00fcr das Starten einer JVM ist das mit ProcessBuilder oder exec() am Einfachsten. <\/p>\n<pre>ProcessBuilder builder = new ProcessBuilder( &quot;java&quot;, &quot;Sample&quot; );\nMap&lt;String, String&gt; env= builder.environment();\nenv.put( &quot;V&quot;, &quot;sample&quot; );\n<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Aprocess+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">Process<\/a> process = builder.start();<\/pre>\n<p>Wenn das Programm das folgende ist: <\/p>\n<pre>public class Sample {\n public static void main( String[] args ) {\n  System.out.println( System.getenv(&quot;V&quot;) );\n }\n}<\/pre>\n<p>F\u00fcr Java 5 war mal eine <a href=\"http:\/\/www.jcp.org\/en\/jsr\/detail?id=121\">Isolation API<\/a> (<a href=\"http:\/\/userfriendly.free.fr\/christopher\/en\/index.php?2006\/06\/24\/18-jsr-121-isolation\">Beschreibung<\/a>) geplant, aber daraus wurde nix. <\/p>\n<p><strong>Wie kann man die Bildschirmausgabe in ein Textfeld umleiten<\/strong><\/p>\n<p>Folgendes gen\u00fcgt, um die Ausgabe in ein Fenster umzuleiten; es referenziert die Variable <code>ta<\/code> ein TextArea-Objekt: <\/p>\n<pre><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Aprintstream+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">PrintStream<\/a> p = new <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Aprintstream+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">PrintStream<\/a>( \n  new <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Aoutputstream+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">OutputStream<\/a>() { \n    public void write( int b ) { \n      ta.append( (char)b ); \n    } \n  } \n);&#160;&#160; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">System<\/a>.setErr( p ); \n<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">System<\/a>.setOut( p );<\/pre>\n<p><strong>Wie kann man ein proportionales Vergr\u00f6\u00dfern eines Fensters erreichen?<\/strong><\/p>\n<p>Wenn wir auf die Gr\u00f6\u00dfenver\u00e4nderung eines Fensters achten wollen, so m\u00fcssen wir mit addComponentListener() einen Listener an das Fenster h\u00e4ngen, der auf die Ver\u00e4nderung reagiert. Wir implementieren eine Klasse, die sich von ComponentAdapter ableitet und \u00fcberschreiben componentResized(). Wenn wir nur das Frame-Objekt als Ereignishorcher mit dem ComponentListener verbinden, ist klar, wer der Ausl\u00f6ser war. Mit getComponent() auf dem Ereignisobjekt bekommen wir genau diesen Frame. Nun ist es Sache des Algorithmus, wie mit der Gr\u00f6\u00dfenver\u00e4nderung zu verfahren ist. Eine M\u00f6glichkeit ist, die aktuelle Gr\u00f6\u00dfe mittels getSize() auszulesen und dann das Minimum aus H\u00f6he und Breite wieder mit setSize() zu setzen. <\/p>\n<pre>import javax.swing.*; \nimport java.awt.*; \nimport java.awt.event.*;&#160;&#160; public class ResizeTheFrame extends <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Ajframe+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">JFrame<\/a> \n{ \n  public ResizeTheFrame() \n  { \n    setSize( 200, 200 ); \n    setDefaultCloseOperation( <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Ajframe+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">JFrame<\/a>.EXIT_ON_CLOSE ); \n    setVisible( true ); \n  }&#160;&#160; public static void main( <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">String<\/a>[] args ) \n  { \n    new ResizeTheFrame().addComponentListener( new ResizeEvent() ); \n  }&#160;&#160; static class ResizeEvent extends <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Acomponentadapter+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">ComponentAdapter<\/a> \n  { \n    @Override \n    public void componentResized( <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Acomponentevent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">ComponentEvent<\/a> event ) \n    { \n      if ( event.getID() == <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Acomponentevent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">ComponentEvent<\/a>.COMPONENT_RESIZED ) \n      { \n        <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Ajframe+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">JFrame<\/a> f = (<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Ajframe+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">JFrame<\/a>) event.getComponent(); \n        <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adimension+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">Dimension<\/a> d = f.getSize(); \n        int size = <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Amath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">Math<\/a>.min( d.width, d.height ); \n        f.setSize( size, size ); \n      } \n    } \n  } \n}<\/pre>\n<p><strong>Wie kann man f\u00fcr die Hilfe mit F1 soll eine Aktion ausl\u00f6sen?<\/strong><\/p>\n<pre>frame.getRootPane().getInputMap( <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Ajcomponent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">JComponent<\/a>.WHEN_IN_FOCUSED_WINDOW).put(<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Akeystroke+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">KeyStroke<\/a>.getKeyStroke(<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Akeyevent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">KeyEvent<\/a>.VK_F1, 0), &quot;HELP&quot; );\nframe.getRootPane().getActionMap().put( &quot;HELP&quot;, new <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Aabstractaction+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">AbstractAction<\/a>()\n{\n  @Override public void actionPerformed( <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Aactionevent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">ActionEvent<\/a> e )\n  {\n    \/\/ ..\n  }\n} );<\/pre>\n<p><strong>Wie kann man das L &amp; F f\u00fcr alle Fenster setzen?<\/strong><\/p>\n<p>Das Setzen eines L &amp; Fs mit <code>setLookAndFeel()<\/code> f\u00fchrt zu keinem Neuzeichnen der Komponenten. Wird das neue L &amp; F gesetzt, bevor Swing die Komponenten darstellen muss, f\u00e4llt das nicht auf. Mit dargestellten Komponenten m\u00fcssen wir jedoch das Neuzeichnen ansto\u00dfen. Dazu dient die Methode <code>SwingUtilities.updateComponentTreeUI(component)<\/code>, wobei <code>component<\/code> im Allgemeinen das Window (also <code>JFrame<\/code>\/<code>JWindow<\/code>) ist. Ein Problem ergibt sich, wenn der Frame noch Window-Objekte erzeugt, da diese immer Kinder eines Fensters sind; \u00c4nderungen des Aussehens m\u00fcssen an diese Kinder weitergegeben werden. Dazu erfragen wir zuerst alle Fenster \u00fcber die statische Funktion <code>Frame.getFrames()<\/code>. Anschlie\u00dfend laufen wir vom Fenster alle Windows ab, die wir dann aktualisieren. <\/p>\n<pre>for ( <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Aframe+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">Frame<\/a> f : <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Aframe+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">Frame<\/a>.getFrames() )\n{\n <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Aswingutilities+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">SwingUtilities<\/a>.updateComponentTreeUI( f );\n for ( <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Awindow+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">Window<\/a> w : f.getOwnedWindows() )\n <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Aswingutilities+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">SwingUtilities<\/a>.updateComponentTreeUI( w );\n}<\/pre>\n<p><strong>Wie kann man Text um 90\u00b0 drehen?<\/strong><\/p>\n<p>Um einen Text um 90 Grad zu drehen, gibt mehrere M\u00f6glichkeiten: 1. Den Text in eine Offscreen Image legen und 1.1 dann zum Beispiel einen Filter drauf loslassen 1.2 ein Arrays raus machen (PixelGrabber) und das Feld umdrehen und wieder in ein Image konvertieren (MemoryImageSource) (ist im Prinzip ein Filter) (Ein Beispiel f\u00fcr einen Rotate Filter findet sich auch im Sun Tutorial) 2. Swing nehmen, den mit dem AffineTransform-Objekt bekommt einen Winkel \u00fcber setToRotation() und zeichnet dann. <\/p>\n<pre>import java.awt.*;\nimport java.awt.event.*;\nimport java.awt.font.*;\nimport java.awt.geom.*;&#160;&#160; public class Demo2D extends <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Aframe+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">Frame<\/a>\n{\n  public Demo2D()\n  {\n    setSize( 400, 400 );\n    addWindowListener( new <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Awindowadapter+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">WindowAdapter<\/a>() {\n      public void windowClosing ( <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Awindowevent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">WindowEvent<\/a> e ) { <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">System<\/a>.exit(0); }\n    });\n  }&#160;&#160; public void paint( <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Agraphics+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">Graphics<\/a> g )\n  {\n    <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Agraphics2d+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">Graphics2D<\/a> g2d = (<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Agraphics2d+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">Graphics2D<\/a>) g;\n    <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Aaffinetransform+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">AffineTransform<\/a> at = new <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Aaffinetransform+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">AffineTransform<\/a>();\n    at.setToTranslation( 200.0, 200.0);\n    g2d.transform(at);\n    at.setToRotation(<a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Amath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">Math<\/a>.PI \/ 2.0);&#160;&#160; for (int i = 0; i &lt; 4; i++) {\n        g2d.drawString( &quot;Tutego likes Java&quot;, 0.0f, 0.0f );\n        g2d.transform(at);\n    }\n  }&#160;&#160; public static void main( <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky\">String<\/a>[] args )\n  {\n    new Demo2D().setVisible( true );\n   }\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Regul\u00e4re Ausdr\u00fccke und Gruppen Um bei einem Pattern wie Pattern pattern = Pattern.compile(\u201c(In)|(present|the)\u201c); herauszufinden, ob das gefundene Wort aus der ersten Gruppe (\u201eIn\u201c) oder aus der zweiten Gruppe (\u201epresent|the\u201c) kommt, l\u00e4sst sich group(int) verwenden. Pattern pattern = Pattern.compile( &quot;(In)|(present|the)&quot; ); String string = &quot;In the present study the cytotoxic activity of aloin&quot;;&#160;&#160; Matcher matcher = [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-1145","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1145","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=1145"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1145\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=1145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=1145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=1145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}