<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1133"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1133/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1133/atom/feed</id>
  <updated>2008-06-11T00:13:33+02:00</updated>
  <entry>
    <title>Bloc-note &#039;Java&#039;</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1133" />
    <id>http://artisan.karma-lab.net/node/1133</id>
    <published>2007-03-23T01:32:13+01:00</published>
    <updated>2008-06-11T00:13:33+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="java" />
    <category term="Aucun" />
    <category term="javafr" />
    <category term="Note" />
    <category term="OK" />
    <summary type="html"><![CDATA[<p>Bloc-Note Java</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Bloc-Note Java</p>
<!--break-->

	<a name='chapter_5'></a>
  <h2>Gestion vidéo bas-niveau</h2>
	
<h3>Activation du mode "Full-screen"</h3>

<p>
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AWindow+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Window</span></a> window <span class="sy0">=</span> <span class="kw1">new</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AWindow+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Window</span></a><span class="br0">&#40;</span>frame<span class="br0">&#41;</span><span class="sy0">;</span><br />
<a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphicsEnvironment+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">GraphicsEnvironment</span></a> ge <span class="sy0">=</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphicsEnvironment+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">GraphicsEnvironment</span></a>.<span class="me1">getLocalGraphicsEnvironment</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphicsDevice+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">GraphicsDevice</span></a> gd <span class="sy0">=</span> ge.<span class="me1">getScreenDevices</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphicsConfiguration+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">GraphicsConfiguration</span></a> gc <span class="sy0">=</span> ge.<span class="me1">getDefaultScreenDevice</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getDefaultConfiguration</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
gd.<span class="me1">setFullScreenWindow</span><span class="br0">&#40;</span>window<span class="br0">&#41;</span><span class="sy0">;</span><br />
window.<span class="me1">requestFocus</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
  </div>
  
  </div>
</p>
<h3>Résumé des configurations écran disponibles</h3>
<p>
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw1">public</span> <span class="kw4">void</span> dumpConfiguration<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphicsEnvironment+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">GraphicsEnvironment</span></a> ge <span class="sy0">=</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphicsEnvironment+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">GraphicsEnvironment</span></a>.<span class="me1">getLocalGraphicsEnvironment</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> ge.<span class="me1">getScreenDevices</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphicsDevice+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">GraphicsDevice</span></a> gd <span class="sy0">=</span> ge.<span class="me1">getScreenDevices</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; logger.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot;Screen &quot;</span> <span class="sy0">+</span> i<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; logger.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot; &nbsp; - id: &quot;</span> <span class="sy0">+</span> gd.<span class="me1">getIDstring</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; logger.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot; &nbsp; - type: &quot;</span> <span class="sy0">+</span> gd.<span class="me1">getType</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; logger.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot; &nbsp; - accelerated Memory: &quot;</span> <span class="sy0">+</span> gd.<span class="me1">getAvailableAcceleratedMemory</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; logger.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot; &nbsp; - class: &quot;</span> <span class="sy0">+</span> gd.<span class="me1">getClass</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; logger.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot; &nbsp; - isDisplayChangeSupported: &quot;</span> <span class="sy0">+</span> gd.<span class="me1">isDisplayChangeSupported</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; logger.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot; &nbsp; - isFullScreenSupported: &quot;</span> <span class="sy0">+</span> gd.<span class="me1">isFullScreenSupported</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> j <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> j <span class="sy0">&lt;</span> gd.<span class="me1">getDisplayModes</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span><span class="sy0">;</span> j<span class="sy0">++</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; DisplayMode displayMode <span class="sy0">=</span> gd.<span class="me1">getDisplayModes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; logger.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot; &nbsp; - &quot;</span> <span class="sy0">+</span> displayMode.<span class="me1">getWidth</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot;x&quot;</span> <span class="sy0">+</span> displayMode.<span class="me1">getHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot;x&quot;</span> <span class="sy0">+</span> displayMode.<span class="me1">getBitDepth</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot; &quot;</span> <span class="sy0">+</span> displayMode.<span class="me1">getRefreshRate</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot; Hz&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span>gd.<span class="me1">getIDstring</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> j <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> j <span class="sy0">&lt;</span> gd.<span class="me1">getConfigurations</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span><span class="sy0">;</span> j<span class="sy0">++</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphicsConfiguration+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">GraphicsConfiguration</span></a> configuration <span class="sy0">=</span> gd.<span class="me1">getConfigurations</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div></p>

<h3>Utilisation de java3D</h3>
<p>
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw1">class</span> CustomCanvas3D <span class="kw1">extends</span> Canvas3D<br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">public</span> CustomCanvas3D<span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphicsConfiguration+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">GraphicsConfiguration</span></a> gcIn<span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">super</span><span class="br0">&#40;</span>gcIn<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; <span class="kw1">public</span> <span class="kw4">void</span> postRender<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; J3DGraphics2D g <span class="sy0">=</span> getGraphics2D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> render<span class="br0">&#40;</span>J3DGraphics2D g<span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">try</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AFileInputStream+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">FileInputStream</span></a> in <span class="sy0">=</span> <span class="kw1">new</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AFileInputStream+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">FileInputStream</span></a><span class="br0">&#40;</span><span class="st0">&quot;/storage/donnees/archives/photos/2005/Ladakh/pict2026.jpg&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; JPEGImageDecoder decoder <span class="sy0">=</span> JPEGCodec.<span class="me1">createJPEGDecoder</span><span class="br0">&#40;</span>in<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ABufferedImage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BufferedImage</span></a> photo <span class="sy0">=</span> decoder.<span class="me1">decodeAsBufferedImage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; in.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; g.<span class="me1">drawImage</span><span class="br0">&#40;</span>photo, <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">catch</span> <span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AException+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Exception</span></a> e<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">// TODO: handle exception</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; g.<span class="me1">flush</span><span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw1">public</span> Test3D<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">throws</span> ImageFormatException, <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AIOException+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IOException</span></a><br />
<span class="br0">&#123;</span><br />
&nbsp; setLayout<span class="br0">&#40;</span><span class="kw1">new</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ABorderLayout+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BorderLayout</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphicsConfiguration+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">GraphicsConfiguration</span></a> config <span class="sy0">=</span><br />
<br />
&nbsp; SimpleUniverse.<span class="me1">getPreferredConfiguration</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; Canvas3D canvas <span class="sy0">=</span> <span class="kw1">new</span> CustomCanvas3D<span class="br0">&#40;</span>config<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; add<span class="br0">&#40;</span><span class="st0">&quot;Center&quot;</span>, canvas<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<br />
&nbsp; SimpleUniverse universe <span class="sy0">=</span> <span class="kw1">new</span> SimpleUniverse<span class="br0">&#40;</span>canvas<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; universe.<span class="me1">getViewingPlatform</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">setNominalViewingTransform</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; setUndecorated<span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; setResizable<span class="br0">&#40;</span><span class="kw2">false</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; setAlwaysOnTop<span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; setVisible<span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; setSize<span class="br0">&#40;</span><span class="nu0">640</span>,<span class="nu0">480</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; setVisible<span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; CustomCanvas3D.<span class="me1">render</span><span class="br0">&#40;</span>universe.<span class="me1">getCanvas</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getGraphics2D</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="kw1">throws</span> ImageFormatException, <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AIOException+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IOException</span></a><br />
<span class="br0">&#123;</span><br />
<br />
&nbsp; <span class="kw1">new</span> Test3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="br0">&#125;</span>
  </div>
  
  </div></p>

<h3>Un redimensionnement propre d'icônes</h3>
<p>
  J'ai essayé des tonnes de méthode pour redimensionner une image type "png" d'un classique 128x128 à 16x16, et quelle que soit la méthode utilisé (draw direct, transformation, etc...), c'est l'enfer. J'ai toujours obtenu une sorte de "nearest" vilain.
</p>
<p>
  La seule méthode que j'ai trouvé est la suivante :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw1">public</span> <span class="kw1">static</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ABufferedImage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BufferedImage</span></a> scaledImage<span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ABufferedImage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BufferedImage</span></a> image, <span class="kw4">int</span> width, <span class="kw4">int</span> height<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AImage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Image</span></a> scaledImage <span class="sy0">=</span> image.<span class="me1">getScaledInstance</span><span class="br0">&#40;</span>width, height, <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AImage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Image</span></a>.<span class="me1">SCALE_SMOOTH</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ABufferedImage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BufferedImage</span></a> scaledBuffer <span class="sy0">=</span> <span class="kw1">new</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ABufferedImage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BufferedImage</span></a><span class="br0">&#40;</span>width, height, <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ABufferedImage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BufferedImage</span></a>.<span class="me1">TYPE_INT_ARGB</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphics2D+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Graphics2D</span></a> graphics <span class="sy0">=</span> scaledBuffer.<span class="me1">createGraphics</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; graphics.<span class="me1">drawImage</span><span class="br0">&#40;</span>scaledImage, <span class="nu0">0</span>, <span class="nu0">0</span>, width, height, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; graphics.<span class="me1">dispose</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> scaledBuffer<span class="sy0">;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div> 
</p>


	<a name='chapter_6'></a>
  <h2>Envoi d'un post http avec cookied</h2>
	
<p>
  <div class='code-block code-block-fragment'>
  <div class='container'>
  PostMethod post <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">try</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> nutName <span class="sy0">=</span> xmlInvokation.<span class="me1">getAttribut</span><span class="br0">&#40;</span><span class="st0">&quot;nut&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> methodName <span class="sy0">=</span> xmlInvokation.<span class="me1">getAttribut</span><span class="br0">&#40;</span><span class="st0">&quot;method&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> channel <span class="sy0">=</span> xmlInvokation.<span class="me1">getAttribut</span><span class="br0">&#40;</span><span class="st0">&quot;channel&quot;</span>, <span class="st0">&quot;nuts&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> host <span class="sy0">=</span> xmlInvokation.<span class="me1">getAttribut</span><span class="br0">&#40;</span><span class="st0">&quot;host&quot;</span>, <span class="st0">&quot;localhost&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw4">int</span> port <span class="sy0">=</span> xmlInvokation.<span class="me1">getAttributAsInteger</span><span class="br0">&#40;</span><span class="st0">&quot;port&quot;</span>, <span class="nu0">8080</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> url <span class="sy0">=</span> <span class="st0">&quot;http://&quot;</span> <span class="sy0">+</span> host <span class="sy0">+</span> <span class="st0">&quot;:&quot;</span> <span class="sy0">+</span> port <span class="sy0">+</span> <span class="st0">&quot;/&quot;</span> <span class="sy0">+</span> channel<span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; NutContainer.<span class="me1">logger</span>.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot;Running invokation : &quot;</span> <span class="sy0">+</span> url <span class="sy0">+</span> &nbsp;<span class="st0">&quot;/&quot;</span><span class="sy0">+</span>nutName <span class="sy0">+</span> <span class="st0">&quot;.&quot;</span> <span class="sy0">+</span> methodName<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; post <span class="sy0">=</span> <span class="kw1">new</span> PostMethod<span class="br0">&#40;</span>url<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> toString <span class="sy0">=</span> xmlInvokation.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">replace</span><span class="br0">&#40;</span><span class="st0">&quot;&amp;&quot;</span>, <span class="st0">&quot;&amp;amp;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>LoggerUtilities.<span class="me1">isDebug</span><span class="br0">&#40;</span>NutContainer.<span class="me1">logger</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; NutContainer.<span class="me1">logger</span>.<span class="me1">debug</span><span class="br0">&#40;</span>url <span class="sy0">+</span> <span class="st0">&quot; : &quot;</span> <span class="sy0">+</span> toString<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; RequestEntity entity <span class="sy0">=</span> <span class="kw1">new</span> StringRequestEntity<span class="br0">&#40;</span>toString, <span class="st0">&quot;text/xml&quot;</span>, <span class="st0">&quot;UTF-8&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; post.<span class="me1">setRequestEntity</span><span class="br0">&#40;</span>entity<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; HttpClient httpclient <span class="sy0">=</span> <span class="kw1">new</span> HttpClient<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; HttpState state <span class="sy0">=</span> httpclient.<span class="me1">getState</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; state.<span class="me1">clearCookies</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>NutContainer.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getCookies</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; state.<span class="me1">addCookies</span><span class="br0">&#40;</span>NutContainer.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getCookies</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw4">int</span> result <span class="sy0">=</span> httpclient.<span class="me1">executeMethod</span><span class="br0">&#40;</span>post<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; state <span class="sy0">=</span> httpclient.<span class="me1">getState</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; Cookie<span class="br0">&#91;</span><span class="br0">&#93;</span> cookies <span class="sy0">=</span> state.<span class="me1">getCookies</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>cookies <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; NutContainer.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">setCookies</span><span class="br0">&#40;</span>cookies<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">// Display status code</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>LoggerUtilities.<span class="me1">isDebug</span><span class="br0">&#40;</span>NutContainer.<span class="me1">logger</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; NutContainer.<span class="me1">logger</span>.<span class="me1">debug</span><span class="br0">&#40;</span><span class="st0">&quot;Response status code: &quot;</span> <span class="sy0">+</span> result<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; NutContainer.<span class="me1">logger</span>.<span class="me1">debug</span><span class="br0">&#40;</span><span class="st0">&quot;Response body: &quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; NutContainer.<span class="me1">logger</span>.<span class="me1">debug</span><span class="br0">&#40;</span>post.<span class="me1">getResponseBodyAsString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">catch</span><span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AException+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Exception</span></a> e<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; LoggerUtilities.<span class="me1">severe</span><span class="br0">&#40;</span>NutContainer.<span class="me1">logger</span>, e<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">finally</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>post <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; post.<span class="me1">releaseConnection</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span>
  </div>
  
  </div></p>




	<a name='chapter_7'></a>
  <h2>Ping en java</h2>
	
<p>

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw1">try</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AInetAddress+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">InetAddress</span></a> address <span class="sy0">=</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AInetAddress+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">InetAddress</span></a>.<span class="me1">getByName</span><span class="br0">&#40;</span>getUrlMatcher<span class="br0">&#40;</span>getUrl<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">getHost</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; startSensoring<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>address.<span class="me1">isReachable</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span> getTimeOut<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; setAlert<span class="br0">&#40;</span><span class="kw1">new</span> SensorAlert<span class="br0">&#40;</span><span class="st0">&quot;Host not reachable&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<span class="kw1">catch</span> <span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AUnknownHostException+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">UnknownHostException</span></a> e<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; setAlert<span class="br0">&#40;</span><span class="kw1">new</span> SensorAlert<span class="br0">&#40;</span><span class="st0">&quot;Unknown host &quot;</span> <span class="sy0">+</span> getUrl<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<span class="kw1">catch</span> <span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AIOException+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IOException</span></a> e<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">throw</span> <span class="kw1">new</span> SensorException<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div>
</p>


	<a name='chapter_8'></a>
  <h2>Création d'un buffer d'image volatile</h2>
	

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw1">protected</span> <span class="kw4">void</span> createBuffer<span class="br0">&#40;</span><span class="kw4">int</span> width, <span class="kw4">int</span> height<span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphicsEnvironment+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">GraphicsEnvironment</span></a> ge <span class="sy0">=</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphicsEnvironment+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">GraphicsEnvironment</span></a>.<span class="me1">getLocalGraphicsEnvironment</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphicsConfiguration+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">GraphicsConfiguration</span></a> gc <span class="sy0">=</span> ge.<span class="me1">getDefaultScreenDevice</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getDefaultConfiguration</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>volatileImage<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; buffer <span class="sy0">=</span> gc.<span class="me1">createCompatibleVolatileImage</span><span class="br0">&#40;</span><span class="nu0">2</span>, height<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw4">int</span> valid <span class="sy0">=</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>VolatileImage<span class="br0">&#41;</span> buffer<span class="br0">&#41;</span>.<span class="me1">validate</span><span class="br0">&#40;</span>gc<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>valid <span class="sy0">==</span> VolatileImage.<span class="me1">IMAGE_INCOMPATIBLE</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; buffer <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; LoggerUtilities.<span class="me1">severe</span><span class="br0">&#40;</span>logger, <span class="st0">&quot;Unable to create volatile image, switching to bufferedImage&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span><span class="br0">&#40;</span>VolatileImage<span class="br0">&#41;</span> buffer<span class="br0">&#41;</span>.<span class="me1">setAccelerationPriority</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>buffer <span class="sy0">==</span> <span class="kw2">null</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; buffer <span class="sy0">=</span> <span class="kw1">new</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ABufferedImage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BufferedImage</span></a><span class="br0">&#40;</span>width, height, <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ABufferedImage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BufferedImage</span></a>.<span class="me1">TYPE_INT_RGB</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span>
  </div>
  
  </div>


	<a name='chapter_9'></a>
  <h2>Activation du pipe OpenGL</h2>
	

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">setProperty</span><span class="br0">&#40;</span><span class="st0">&quot;sun.java2d.opengl&quot;</span>, StringUtilities.<span class="me1">firstUp</span><span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a>.<span class="me1">valueOf</span><span class="br0">&#40;</span>configuration<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">isOpenGl</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
  </div>
  
  </div>


	<a name='chapter_10'></a>
  <h2>Spécification du dossier des JNI</h2>
	
-Djava.library.path=./native/


	<a name='chapter_11'></a>
  <h2>Vérifications d'usage : NPTL</h2>
	
<p>
  NPTL est une fonction ajoutée au kernel récent pour optimiser la gestion des threads. Avant, un thread était un processus, comme une application lancée séparement ou plus exactement s'était un fork. l'arrivée de NPTL a permis de gérer les threads de manière plus efficace. Pour se donner une idée, l'ouverture de 100 000 threads prenait quelques 15 minutes sur un i86 contre, avec NPTL, 2 secondes sur la même machine. Dans la mesure où java utilise massivement les threads, l'arrivée de NPTL a booster les performances de près de 30% sous Linux. Il est donc important de vérifier s'ils sont activés sur la machine qui va héberger une application Java.
</p>

<p>Avant de se casser la tête, vérifions que les NPTL sont présent tout court sur cette distribution :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  getconf GNU_LIBPTHREAD_VERSION<br />
<span class="co0"># qui me répond :</span><br />
<span class="co0"># &nbsp; &nbsp;NPTL 2.4</span>
  </div>
  
  </div>
</p>

<p>
  Parfait. La gestion des threads est conférée à la librairie <kbd>libc</kbd>. Hors il y a 3 libc différentes sur une distribution moderne. Une dans <kbd>/lib</kbd>, une dans <kbd>/lib/tls</kbd> et une encore dans <kbd>/lib/i686.</kbd>. Pour connaître ce que supporte une de ses librairies, l'astuce consiste à les rendre exécutables et de les lancer.. En tant que root évidement :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/chmod"><span class="kw2">chmod</span></a> +x <span class="sy0">/</span>lib<span class="sy0">/</span>libc<span class="nu0">-2.3</span><span class="nu0">.5</span>.so<br />
<span class="sy0">/</span>lib<span class="sy0">/</span>libc<span class="nu0">-2.3</span><span class="nu0">.5</span>.so
  </div>
  
  </div>
</p>

<p>
  Ici, j'obtiens (entre autre) la ligne suivante :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  linuxthreads-0.10 by Xavier Leroy
  </div>
  
  </div>
</p>

<p>
  Pas de NPTL donc.. On continue sur les autres, même manipulation donc pour <kbd>/lib/tls/libc-2.3.5.so</kbd> j'obtiens :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  Native POSIX Threads Library by Ulrich Drepper et al
  </div>
  
  </div>
</p>

<p>
  Parfait, la librairie à utiliser est donc celle de <kbd>/lib/tls</kbd>. Maintenant pour savoir dans quel ordre sont lynkées ses librairies :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  ldconfig -p <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/grep"><span class="kw2">grep</span></a> <span class="st0">&quot;libc&quot;</span><br />
<span class="co0"># Ce qui me donne :</span><br />
<span class="co0"># &nbsp;libc.so.6 (libc6, hwcap: 0x8000000000000000, OS ABI: Linux 2.6.9) =&gt; /lib/tls/libc.so.6</span><br />
<span class="co0"># &nbsp;libc.so.6 (libc6, hwcap: 0x8000000000000, OS ABI: Linux 2.4.1) =&gt; /lib/i686/libc.so.6</span><br />
<span class="co0"># &nbsp;libc.so.6 (libc6, OS ABI: Linux 2.2.5) =&gt; /lib/libc.so.6</span>
  </div>
  
  </div>
</p>

<p>
  C'est positif, maintenant cherchons à savoir à quelle librairie fait appel java :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/ldd"><span class="kw2">ldd</span></a> <span class="sy0">/</span>usr<span class="sy0">/</span>java<span class="sy0">/</span>jdk<span class="sy0">/</span>jre<span class="sy0">/</span>bin<span class="sy0">/</span>java <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/grep"><span class="kw2">grep</span></a> libc<br />
<span class="co0"># cela donne :</span><br />
<span class="co0"># &nbsp; libc.so.6 =&gt; /lib/tls/libc.so.6 (0xb7de5000)</span>
  </div>
  
  </div>
</p>
<p>
  Parfait, java utilise bien la bonne librairie. On peut passer à la suite <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/smile.gif" title="Smiling" alt="Smiling" class="smiley-content"/>
</p>


	<a name='chapter_12'></a>
  <h2>Librairies utiles</h2>
	
<ul><a class='external' target='_blank' href='http://www.p6spy.com/index.html' >p6spy.com</a></ul>
<li>
</ul>


	<a name='chapter_13'></a>
  <h2>Conversion de dates en multi-threads</h2>
	
<p>
  L'objet SimpleDateFormat n'est pas threadsafe... Et le résulat est très étrange, cela peut donner une erreur du type <kbd>java.lang.NumberFormatException: multiple points</kbd>, et ce depuis le JDK1.4 jusqu'au 1.6. La solution, chynchroniser sur l'objet :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw1">synchronized</span> <span class="br0">&#40;</span>dateFormat<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="kw1">return</span> dateFormat.<span class="me1">parse</span><span class="br0">&#40;</span>value<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span>
  </div>
  
  </div>
</p>


	<a name='chapter_14'></a>
  <h2>IllegalMonitorStateException</h2>
	
<p>
  Un grand classique... Imaginons que nous voulions attendre dans notre thread qu'un événement se produise ailleurs. Cela donne quelque chose du genre :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  &nbsp; &nbsp;<span class="kw1">class</span> bidule <span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="kw1">private</span> <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> valeur <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp;<a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> ecrireValeur<span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> valeur<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span class="kw1">this</span>.<span class="me1">valeur</span> <span class="sy0">=</span> valeur<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp;<span class="kw1">this</span>.<span class="me1">notify</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp;<a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> lireValeur<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">wait</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> valeur<span class="sy0">;</span><br />
&nbsp; &nbsp;<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div>
</p>
<p>
   Dans un thread on va donc avoir un <kbd>maValeur = bidule.lireValeur()</kbd> qui va bloquer jusqu'à ce qu'un autre thread fasse un <kbd>bidule.ecrireValeur(...)</kbd>. Et au lancement, padaboum, on se prend un bon vieux <kbd>IllegalMonitorStateException</kbd> sur le <kbd>wait</kbd>. La solution est aussi simple à mettre en oeuvre qu'à comprendre. En effet, que se passerait-il avec ce code si plusieurs threads appelaient la méthode <kbd>lireValeur</kbd> ? Benoîtement on se dit "il sont tous en attente". Manque de pot, Java ne sait pas faire cela car le "Wait" est lié à un et un seul thread. Donc si le but recherché est est d'avoir plusieurs thread appelant, il faut passer par une autre solution. Maintenant si <kbd>lireValeur</kbd> est appelé par un seul thread, il faut que cette méthode soit déclarée dans ce sens. Il suffit donc d'ajouter un <kbd>synchronized</kbd> dans la déclaration de la méthode pour régler notre problème. En rajouter un dans écrireValeur ne ferait pas de mal non plus ceci dit. 
</p>
<p>
  En somme, la régle, c'est que <kbD>wait</kbd> ne peut avoir lieu que dans un block synchronizé.
</p>


	<a name='chapter_15'></a>
  <h2>Crash entre Swing et Xinerama</h2>
	
<p>
Si au lancement de Swing vous obtenez une horreur du genre 

  <div class='code-block code-block-fragment'>
  <div class='container'>
  Locking assertion failure. &nbsp;Backtrace:<br />
#0 /usr/lib/libxcb-xlib.so.0 [0xb7cca767]<br />
#1 /usr/lib/libxcb-xlib.so.0(xcb_xlib_unlock+0x31) [0xb7cca8b1]<br />
#2 /usr/lib/libX11.so.6(_XReply+0xfd) [0xab708a8d]<br />
#3 /opt/java/jre/lib/i386/xawt/libmawt.so [0xab81864e]<br />
#4 /opt/java/jre/lib/i386/xawt/libmawt.so [0xab7f6f97]<br />
#5 /opt/java/jre/lib/i386/xawt/libmawt.so [0xab7f7248]<br />
#6 /opt/java/jre/lib/i386/xawt/libmawt.so(Java_sun_awt_X11GraphicsEnvironment_initDisplay+0x2f) [0xab7f754f]<br />
#7 [0xb5c9366e]<br />
#8 [0xb5c8bedd]<br />
#9 [0xb5c8bedd]<br />
#10 [0xb5c89243]<br />
#11 /opt/java/jre/lib/i386/client/libjvm.so [0x620bc6d]<br />
#12 /opt/java/jre/lib/i386/client/libjvm.so [0x630a828]<br />
#13 /opt/java/jre/lib/i386/client/libjvm.so [0x620bb00]<br />
#14 /opt/java/jre/lib/i386/client/libjvm.so(JVM_DoPrivileged+0x34b) [0x62619bb]<br />
#15 /opt/java/jre/lib/i386/libjava.so(Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2+0x3d) [0xb7ca496d]<br />
#16 [0xb5c9366e]<br />
#17 [0xb5c8bd77]<br />
#18 [0xb5c89243]<br />
#19 /opt/java/jre/lib/i386/client/libjvm.so [0x620bc6d]<br />
Locking assertion failure. &nbsp;Backtrace:<br />
#0 /usr/lib/libxcb-xlib.so.0 [0xb7cca767]<br />
#1 /usr/lib/libxcb-xlib.so.0(xcb_xlib_lock+0x2e) [0xb7cca81e]<br />
#2 /usr/lib/libX11.so.6 [0xab707e08]<br />
#3 /usr/lib/libX11.so.6(XGetVisualInfo+0x26) [0xab6feb76]<br />
#4 /opt/java/jre/lib/i386/xawt/libmawt.so [0xab7f6249]<br />
#5 /opt/java/jre/lib/i386/xawt/libmawt.so [0xab7f6495]<br />
#6 /opt/java/jre/lib/i386/xawt/libmawt.so [0xab7f72f9]<br />
#7 /opt/java/jre/lib/i386/xawt/libmawt.so(Java_sun_awt_X11GraphicsEnvironment_initDisplay+0x2f) [0xab7f754f]<br />
#8 [0xb5c9366e]<br />
#9 [0xb5c8bedd]<br />
#10 [0xb5c8bedd]<br />
#11 [0xb5c89243]<br />
#12 /opt/java/jre/lib/i386/client/libjvm.so [0x620bc6d]<br />
#13 /opt/java/jre/lib/i386/client/libjvm.so [0x630a828]<br />
#14 /opt/java/jre/lib/i386/client/libjvm.so [0x620bb00]<br />
#15 /opt/java/jre/lib/i386/client/libjvm.so(JVM_DoPrivileged+0x34b) [0x62619bb]<br />
#16 /opt/java/jre/lib/i386/libjava.so(Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2+0x3d) [0xb7ca496d]<br />
#17 [0xb5c9366e]<br />
#18 [0xb5c8bd77]<br />
#19 [0xb5c89243]
  </div>
  
  </div>
</p>
<p>
 Cela viendrait du fait qu'AWT ait été compilé en statique avec X11. La solution est un patch sauvage de Java :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/sed"><span class="kw2">sed</span></a> -i <span class="st0">'s/XINERAMA/FAKEEXTN/g'</span> &nbsp;<span class="sy0">/</span>usr<span class="sy0">/</span><span class="kw3">local</span><span class="sy0">/</span>java<span class="sy0">/</span>jdk1<span class="nu0">.6</span>.0_04<span class="sy0">/</span>jre<span class="sy0">/</span>lib<span class="sy0">/</span>i386<span class="sy0">/</span>xawt<span class="sy0">/</span>libmawt.so
  </div>
  
  </div>
</p>




	<a name='chapter_16'></a>
  <h2>Look and feel Swing natif</h2>
	
<p>

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw1">try</span> <span class="br0">&#123;</span><br />
&nbsp; <a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AUIManager+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">UIManager</span></a>.<span class="me1">setLookAndFeel</span><span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AUIManager+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">UIManager</span></a>.<span class="me1">getSystemLookAndFeelClassName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span><a target="blank" href="http://www.google.com/search?hl=en&amp;q=allinurl%3AException+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Exception</span></a> e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; Traces.<span class="me1">severe</span><span class="br0">&#40;</span>logger, e<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div>
</p>    ]]></content>
  </entry>
</feed>
