<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>&#51060;&#53364;&#47549;&#49828; &#47928;&#49436;(articles) &#48264;&#50669; &#45432;&#53944;</title>
    <link>http://eclipse-articles.springnote.com/pages</link>
    <description>&#51060;&#53364;&#47549;&#49828; &#47928;&#49436;(articles) &#48264;&#50669; &#45432;&#53944;</description>
    <language>ko-KR</language>
    <item>
      <title>Eclipse Forms: New in 3.3</title>
      <description>&lt;p&gt;&#50896;&#47928; :&amp;nbsp;&lt;a href="http://www.eclipse.org/articles/article.php?file=Article-Forms33/index.html" title="http://www.eclipse.org/articles/article.php?file=Article-Forms33/index.html"&gt;http://www.eclipse.org/articles/article.php?file=Article-Forms33/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Eclipse Forms: 3.3&#50640;&#49436; &#49352;&#47196;&#50892;&#51652; &#44163;&lt;/h1&gt;
&lt;div class="section" style="background-color: #F9F9D8;"&gt;
&lt;h5 class="section"&gt;&#50836;&#50557;&lt;br class="section" /&gt;&lt;/h5&gt;
&lt;p class="section"&gt;Eclipse Forms is a layer on top of SWT that allows you to achieve a web-like feel inside your desktop applications without having to resort to an embedded browser. In this article, the new features added to Eclipse Forms in version 3.3 are discussed. Readers are expected to be familiar with Eclipse Forms and its concepts. If that is not the case, a good starting point would be the article,&amp;nbsp;&lt;a href="http://www.eclipse.org/articles/Article-Forms/article.html" class="section" title="http://www.eclipse.org/articles/Article-Forms/article.html"&gt;Eclipse Forms: Rich UI for Rich Client Applications&lt;/a&gt;. Another valuable resource is the&amp;nbsp;&lt;a href="http://help.eclipse.org/help33/topic/org.eclipse.platform.doc.isv/guide/forms.htm" class="section" title="http://help.eclipse.org/help33/topic/org.eclipse.platform.doc.isv/guide/forms.htm"&gt;online documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p class="section"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="section"&gt;&lt;span class="section" style="font-weight: bold;"&gt;By Adam Archer, IBM Canada Ltd.&lt;/span&gt;&lt;/p&gt;
&lt;p class="section"&gt;Copyright &#169; 2007 IBM Canada Ltd.&lt;/p&gt;
&lt;p class="section"&gt;September 5, 2007&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&#49548;&#44060;&lt;/h2&gt;
&lt;p&gt;Eclipse Forms is a layer on top of SWT that allows you to achieve a web-like feel inside your desktop applications without having to resort to an embedded browser. Due to its sophisticated functionality and relatively small footprint, its popularity has been constantly growing since its inception.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As the clients of forms has grown in numbers, so too has the complexity of their implementations. Developers are using forms to represent more complex resources and perform more in depth tasks than ever before. This requires a much higher level of interaction and more control over the layout and functionality of forms. One area that was lacking in previous versions was the variety of ways a developer could customize and make use of the form heading.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For this reason, the majority of the new features provided in 3.3 are related to forms headings. Clients of forms now have many more options at their disposal regarding what they can do with their headings. In addition, there have been some improvements to sections and some useful new APIs have been added.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Setup &#49444;&#51221;? &#51456;&#48708;?&lt;/h2&gt;
&lt;p&gt;&#51060; &#47928;&#49436;&#50640;&#49436;&#45716;&amp;nbsp;&#50696;&#51228; &#53076;&#46300;&#47484; &#53685;&#54644;&#49436; &#51060;&#53364;&#47549;&#49828; &#48624;&#47484; &#52628;&#44032;&#54620;&#45796;.&amp;nbsp;&#51060; &#47928;&#49436;&#51032; &#45208;&#47672;&#51648; &#44284;&#51221;&#46308;&#51012; &#51456;&#48708;&#54616;&#47140;&#47732;, &#45796;&#51020; &#45800;&#44228;&#47484; &#53685;&#54644; &#54540;&#47084;&#44536;&#51064; &#54532;&#47196;&#51229;&#53944;&#47484; &#54616;&#45208; &#51456;&#48708;&#54616;&#46020;&#47197; &#54620;&#45796;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&#51060;&#53364;&#47549;&#49828; 3.3 &#51060;&#54980; &#48260;&#51204;&#51012; &#49892;&#54665;&#54616;&#44256; &#54872;&#50689;(welcome) &#52285;&#51060; &#46888;&#47732; &#45803;&#50500;&#51456;&#45796;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong style=""&gt;File &amp;gt; New &amp;gt; Project... &amp;gt; Plug-in Project&lt;/strong&gt; &#47484; &#49440;&#53469;&#54620;&#45796;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&#54532;&#47196;&#51229;&#53944; &#51060;&#47492;&#51012; &#45347;&#44256; &#45796;&#51020;(Next)&#51012; &#46160; &#48264; &#53364;&#47533;&#54620;&#45796;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;"&lt;strong style=""&gt;Plug-in with a view&lt;/strong&gt;"&#47484; &#49440;&#53469;&#54616;&#44256; &#47560;&#52840;(&lt;strong style=""&gt;Finish&lt;/strong&gt;)&#51012; &#53364;&#47533;&#54620;&#45796;.&lt;/li&gt;
&lt;li&gt;plug-in manifest editor&#51032;&amp;nbsp;dependency &#53485;&#50640;&#49436;&amp;nbsp;&lt;span style="font-family: 'Courier New', monospace;"&gt;org.eclipse.ui.forms&lt;/span&gt;&#51012; &#52628;&#44032;&#54620;&#45796;.&lt;/li&gt;
&lt;li&gt;&#48624;(view)&#47484; &#51221;&#51032;&#54616;&#45716; &#53364;&#47000;&#49828;&#47484; &#50676;&#44256; &#45796;&#51020; &#53076;&#46300;&#47484; &#45347;&#50612;&#51456;&#45796;:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;public class SampleView extends ViewPart {&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;private FormToolkit toolkit;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;private Form form;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;/**&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; * The constructor.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;public SampleView() {&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;/**&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; * This is a callback that will allow us to create the viewer and&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; * initialize it.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;public void createPartControl(Composite parent) {&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;toolkit = new FormToolkit(parent.getDisplay());&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;form = toolkit.createForm(parent);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;form.setText("Hello, Eclipse Forms");&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;/**&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; * Passing the focus request to the form.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;public void setFocus() {&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;form.setFocus();&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;/**&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; * Disposes the toolkit&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; */&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;public void dispose() {&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;toolkit.dispose();&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;super.dispose();&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;}&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#48624;(view)&#47484; &#53580;&#49828;&#53944;&#54616;&#44592; &#50948;&#54644;&#49436;&#45716; &#45796;&#51020; &#44284;&#51221;&#51012; &#49688;&#54665;&#54616;&#47732; &#46108;&#45796;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&#49373;&#49457;&#54620; &#54532;&#47196;&#51229;&#53944;&#51032; plug-in manifest editor&#51032; overview &#54168;&#51060;&#51648;&#47484; &#50672;&#45796;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;"&lt;strong style=""&gt;Launch an Eclipse application&lt;/strong&gt;" &#47553;&#53356;&#47484; &#53364;&#47533;&#54620;&#45796;.&lt;/li&gt;
&lt;li&gt;&#49352;&#47196;&#50868; &#51060;&#53364;&#47549;&#49828;&#44032; &#45208;&#53440;&#45208;&#47732;, "&lt;strong style=""&gt;Window &amp;gt; Show View &amp;gt; Other... &amp;gt; Sample Category &amp;gt; Sample View&lt;/strong&gt;"&#47484; &#49440;&#53469;&#54620;&#45796;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#48624;&#44032; &#45796;&#51020;&#44284; &#44057;&#51060; &#48372;&#50668;&#51656; &#44163;&#51060;&#45796;:&lt;/p&gt;
&lt;p&gt;&lt;img title="form-start.png" src="/pages/2453756/attachments/3883699" alt="form-start.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style=""&gt;&#44536;&#47548; 1&lt;/strong&gt;: &#48624;&#50640;&#49436; &#48372;&#50668;&#51648;&#45716; &#44592;&#48376;&#51201;&#51064; &#54268;(form)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&#54268; &#54756;&#45908; &#48512;&#48516;&amp;nbsp;&#54693;&#49345;(Form Heading Improvements)&lt;/h2&gt;
&lt;p&gt;&#50948;&#50640;&#49436; &#50616;&#44553;&#54620;&#45824;&#47196;, 3.3&#50640;&#49436; &#54268;&#51032; &#54756;&#45908;&amp;nbsp;&#48512;&#48516;(form heading)&#51008; &#47588;&#50864; &#44053;&#47141;&#54644;&#51276;&#45796;. &#51060; &#47928;&#49436;&#50640;&#49436;&#45716; &#47784;&#46304; &#49352;&#47196;&#50868; &#44592;&#45733;&#44284; &#49324;&#50857; &#44032;&#45733;&#54620; &#50741;&#49496;&#46308;&#51012; &#49332;&#54196;&#48376;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;em style=""&gt;&#53440;&#51060;&#53952; &#47116;&#45908;&#47553;(Title Rendering)&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;&#44592;&#48376;&#51201;&#51004;&#47196;, &#54268;&#51032; &#54756;&#45908; &#48512;&#48516;&#51008; &#44536;&#47548; 1&#50640;&#49436; &#48372;&#45716; &#44163;&#52376;&#47100;&amp;nbsp;&#54268;&#51032; &#48176;&#44221;&#49353;&#44284; &#46041;&#51068;&#54616;&#44172; &#44536;&#47140;&#51652;&#45796;. &#51060;&#45716; &#54268;&#51032; &#54756;&#45908;&#50752; &#45796;&#47480; &#48512;&#48516;&#51012; &#44396;&#48324;&#54616;&#44592; &#55192;&#46308;&#44172; &#54616;&#44256;, &#51204;&#54784; &#47588;&#47141;&#51201;&#51060;&#51648; &#47803;&#54616;&#45796;. 3.3 &#51060;&#51204;&#50640;&#45716;, &#48176;&#44221;&#49353;&#51012; &#52964;&#49828;&#53552;&#47560;&#51060;&#51592;&#54624; &#49688; &#51080;&#45716; 2&#44032;&#51648; &#48324;&#46020;&#51032; &#48169;&#48277;&#51060; &#51080;&#50632;&#45796;. &#54756;&#45908; &#51204;&#52404;&#47484; &#53440;&#51068;&#54805;&#53468;&#47196; &#52292;&#50872; &#48176;&#44221; &#51060;&#48120;&#51648;&#47484; &#49324;&#50857;&#54616;&#45912;&#51648;, &#44536;&#46972;&#46356;&#50616;&#53944; &#48176;&#44221;&#49353;&#51012; &#47564;&#46308;&#44592; &#50948;&#54620; &#49353;&#49345;&#51032; &#48176;&#50676;&#51012; &#49324;&#50857;&#54616;&#45716; &#44163;&#51060;&#45796;. &#51060;&#47088; &#51217;&#44540;&#51032; &#50612;&#47140;&#50868; &#51216;&#51008;, &#46356;&#51088;&#51060;&#45320;&#44032; &#49436;&#47196; &#45796;&#47480; &#54540;&#47019;&#54268;&#44284; &#49884;&#49828;&#53596; &#54872;&#44221;&#51012; &#44256;&#47140;&#54644;&#50556; &#54620;&#45796;&#45716; &#44163;&#51060;&#45796;. &#50500;&#47560;&#46020; &#49324;&#50857;&#51088;&#51032; &#54872;&#44221;&#46020; &#44256;&#47140;&#54644;&#50556; &#46112; &#44163;&#51060;&#45796;. &#54616;&#51648;&#47564;, &#46356;&#51088;&#51064;&#51008; &#47784;&#46304; &#54872;&#44221;&#50640;&#49436; &#51339;&#44172; &#45208;&#50752;&#50556; &#54620;&#45796;. &#51060;&#53364;&#47549;&#49828;&#44032; &#45796;&#50577;&#54620; &#54540;&#47019;&#54268;&#51012; &#51648;&#50896;&#54616;&#44592; &#46412;&#47928;&#50640; &#51060;&#47088; &#48169;&#49885;&#51008; &#51208;&#45824; &#49772;&#50868; &#51068;&#51060; &#50500;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3.3&#50640;&#49436; &#54268;&#51008; &lt;span style="font-family: 'Courier New', monospace;"&gt;FormToolkit&lt;/span&gt;&#50640; &#54756;&#45908; &#48512;&#48516;&#51012; &#44536;&#46972;&#46356;&#50616;&#53944; &#49828;&#53440;&#51068;&#47196; &#52832;&#54616;&#46020;&#47197; &#50508;&#47140;&#51452;&#45716; &#44036;&#45800;&#54620; &#47700;&#52852;&#45768;&#51608;&#51012; &#51228;&#44277;&#54620;&#45796;. &#53812;&#53431;&#51008; &#51648;&#50896;&#54616;&#45716; &#47784;&#46304; &#54872;&#44221;&#50640;&#49436; &#51096; &#48372;&#50668;&#51656; &#49688; &#51080;&#45716;&amp;nbsp;&#49353;&#49345; &#51312;&#54633;&#51012; &#51648;&#50896;&#54620;&#45796;. &#44060;&#48156;&#51088;&#45716; &#45796;&#51020; &#49345;&#49688;&#47196; &#51060; &#49353;&#49345;&#51012; &#51649;&#51217; &#51217;&#44540; &#54624; &#49688;&#46020; &#51080;&#45796;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;H_&lt;/span&gt;&lt;em style=""&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;GRADIENT_&lt;/span&gt;&lt;/em&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;START&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;H_&lt;/span&gt;&lt;em style=""&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;GRADIENT_&lt;/span&gt;&lt;/em&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;END&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;H_&lt;/span&gt;&lt;em style=""&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;BOTTOM_&lt;/span&gt;&lt;/em&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;KEYLINE1&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;H_&lt;/span&gt;&lt;em style=""&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;BOTTOM_&lt;/span&gt;&lt;/em&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;KEYLINE2&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#48708;&#47197; &#49353;&#49345;&#46308;&#51012; &#49345;&#49688; &#54805;&#53468;&#47196; &#49324;&#50857;&#54624; &#49688; &#51080;&#51648;&#47564;, &#45796;&#51020; &#53076;&#46300;&#50640;&#49436; &#48372;&#50668;&#51648;&#45716; &#48169;&#48277;&#51004;&#47196; &#54756;&#45908; &#48512;&#48516;&#51012; &#49789;&#44172; &#49444;&#51221;&#54624; &#49688; &#51080;&#45796;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;public void createPartControl(Composite parent) {&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;toolkit = new FormToolkit(parent.getDisplay());&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;form = toolkit.createForm(parent);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;form.setText("Hello, Eclipse Forms");&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;toolkit.decorateFormHeading(form);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;// NEW LINE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;}&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#50948; &#53076;&#46300;&#47484; &#51201;&#50857;&#54616;&#47732;, &#45796;&#51020;&#44284; &#44057;&#51060; &#48372;&#50668;&#51656; &#44163;&#51060;&#45796;.:&lt;/p&gt;
&lt;p&gt;&lt;img title="form-decorated.png" src="/pages/2453756/attachments/3883701" alt="form-decorated.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style=""&gt;&#44536;&#47548; 2&lt;/strong&gt;: &#54756;&#45908; &#48512;&#48516;&#51012; &#44984;&#47728;&#45459;&#51008; &#44592;&#48376; &#54268;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;em style=""&gt;&#53812;&#48148; &#47112;&#51060;&#50500;&#50883; &#48320;&#54868;?? (Toolbar Layout Changes)&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;&#44060;&#48156;&#51088;&#46308;&#51060; &#54268;&#51012; &#49324;&#50857;&#54644;&#49436; &#48372;&#45796; &#45908; &#48373;&#51105;&#54620; &#44163;&#51012; &#47564;&#46308;&#44172; &#46104;&#47732;&#49436; &#54756;&#46300; &#53364;&#46972;&#51060;&#50616;&#53944;(head client) &#51901;&#50640;&amp;nbsp;&#45796;&#50577;&#54620; &#52968;&#53584;&#52768;&#46308;&#51060; &#44592;&#54616;&#44553;&#49688;&#51201;&#51004;&#47196; &#54252;&#54632;&#46104;&#50632;&#45796;. 3.3 &#51060;&#51204;&#50640;&#49436;&#45716;&amp;nbsp;&lt;span style="line-height: 2em; font-family: 'Courier New', monospace;"&gt;FormHeading&lt;/span&gt;&#51032; &#54756;&#46300; &#53364;&#46972;&#51060;&#50616;&#53944; &#48512;&#48516;&#51008; &#53440;&#51060;&#53952;&#44284; &#44057;&#51008; &#51460;(row)&#50640; &#51088;&#47532;&#54664;&#50632;&#45796;. &#51060; &#48169;&#49885;&#51008; &#44060;&#48156;&#51088;&#46308;&#50640;&#44172; &#44277;&#44036;&#51032; &#48512;&#51313;&#54632;&#51012; &#51452;&#44256;, &#44592;&#45733;&#51032; &#51228;&#50557;&#51012; &#44032;&#51256;&#45796; &#51452;&#50632;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3.3&#50640;&#49436; &#54756;&#46300; &#53364;&#46972;&#51060;&#50616;&#53944;&#45716; &#54756;&#45908;&#51032; 2&#48264;&#51704; &#51460;&#47196; &#51060;&#46041;&#54664;&#45796;. &#53812;&#48148;&#45716; &#44592;&#51316;&#52376;&#47100; &#53440;&#51060;&#53952;&#44284; &#44057;&#51060; 1&#48264;&#51704; &#51460;&#50640; &#45224;&#50500;&#51080;&#45796;. &#54616;&#51648;&#47564;, &#45796;&#51020; &#53076;&#46300;&#47484; &#49324;&#50857;&#54644;&#49436; &#53812;&#48148;&#46020; 2&#48264;&#51704; &#51460;&#47196; &#51060;&#46041;&#49884;&#53420; &#49688; &#51080;&#45796;.&amp;nbsp;&lt;span style="line-height: 2em; font-family: 'Courier New', monospace;"&gt;form.setToolBarVerticalAlignment(SWT.BOTTOM)&lt;/span&gt;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#53076;&#46300;&#47484; &#44036;&#45800;&#55176; &#49688;&#51221;&#54644;&#49436; &#54756;&#46300; &#53364;&#46972;&#51060;&#50616;&#53944;&#50752; &#53812;&#48148;&#47484; &#52628;&#44032;&#54624; &#49688; &#51080;&#45796;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;public void createPartControl(Composite parent) {&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;toolkit = new FormToolkit(parent.getDisplay());&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;form = toolkit.createForm(parent);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;form.setText("Hello, Eclipse Forms");&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;toolkit.decorateFormHeading(form);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;form.setHeadClient(toolkit.createButton(form.getHead(), "This is the head client", SWT.PUSH));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;// NEW LINE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;form.getToolBarManager().add(new Action("This is the toolbar") { });&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;// NEW LINE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;form.getToolBarManager().update(true);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;// NEW LINE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;&amp;nbsp;&amp;nbsp;form.setToolBarVerticalAlignment(SWT.BOTTOM);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// NEW LINE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;}&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#51060; &#53076;&#46300;&#47484; &#46028;&#47140;&#48372;&#47732; &#45796;&#51020; &#44536;&#47548;&#52376;&#47100; &#45208;&#50732; &#44163;&#51060;&#45796;:&lt;/p&gt;
&lt;p&gt;&lt;img title="form-toolbar1.png" src="/pages/2453756/attachments/3883703" alt="form-toolbar1.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style=""&gt;&#44536;&#47548; 3&lt;/strong&gt;: &#54756;&#46300; &#53364;&#46972;&#51060;&#50616;&#53944;(head client)&#50752; &#50500;&#47000;&#47196; &#51221;&#47148;&#46108; &#53812;&#48148;&#47484; &#44032;&#51652; &#54268;(form)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#50948; &#53076;&#46300;&#50640;&#49436; &#47560;&#51648;&#47561; &#51460;&#51012; &#51452;&#49437; &#52376;&#47532;&#54616;&#47732;, &#53812;&#48148;&#51032; &#51221;&#47148; &#48169;&#49885;&#51060; &#44592;&#48376;&#44050;&#51004;&#47196; &#51201;&#50857;&#46104;&#44256; &#45796;&#51020;&#44284; &#44057;&#51060; &#45208;&#50732; &#44163;&#51060;&#45796;:&lt;/p&gt;
&lt;p&gt;&lt;img title="form-toolbar2.png" src="/pages/2453756/attachments/3883705" alt="form-toolbar2.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style=""&gt;&#44536;&#47548; 4&lt;/strong&gt;: &#54756;&#46300; &#53364;&#46972;&#51060;&#50616;&#53944;(head client)&#50752; &#44592;&#48376;&#44050;&#51004;&#47196; &#51221;&#47148;&#46108; &#53812;&#48148;&#47484; &#44032;&#51652; &#54268;(form)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;em style=""&gt;&#47700;&#49884;&#51648; &#54648;&#46308;&#47553;&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;&#47532;&#52824; UI &#46356;&#51088;&#51064;&#50640;&#49436; &#47588;&#50864; &#51473;&#50836;&#54620; &#44163;&amp;nbsp;&#51473;&#51032; &#54616;&#45208;&#44032; &#49324;&#50857;&#51088;&#44032; &#49892;&#49688;&#54664;&#51012; &#46412;, &#51593;&#49884; &#50508;&#47140;&#51452;&#44256; &#44536;&#44163;&#51012; &#51221;&#51221;&#54624; &#49688; &#51080;&#46020;&#47197; &#46020;&#50752;&#51460; &#49688; &#51080;&#50612;&#50556; &#54620;&#45796;&#45716; &#44163;&#51060;&#45796;. &#53356;&#44256; &#48373;&#51105;&#54620; &#54268;&#50640;&#49436;&#45716; &#47749;&#54869;&#54620; &#54364;&#49884;&#44032; &#50630;&#51060;&#45716; &#47924;&#50631;&#51060; &#51096;&#47803;&#46095;&#45716;&#51648; &#51064;&#49885;&#54616;&#44592;&#44032; &#50612;&#47157;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#51060;&#47088; &#51060;&#50976;&#47196;, 3.3&#50640;&#49436; &#50640;&#47084; &#47700;&#49884;&#51648; &#54648;&#46308;&#47553; &#54532;&#47112;&#51076;&#50892;&#53356;&#44032; &#54693;&#49345;&#46104;&#50632;&#45796;.&amp;nbsp;&lt;span style="line-height: 2em; font-family: 'Courier New', monospace;"&gt;org.eclipse.jface.dialogs.IMessageProvider&lt;/span&gt;&amp;nbsp;&#50640;&#49436; &#51221;&#51032;&#46108; &#53440;&#51077;&#51032; &#47700;&#49884;&#51648;&#45716; &#51060;&#51228; &#54268;&#51032; &#54756;&#45908;&#48512;&#48516;&#50640; &#51080;&#45716;&amp;nbsp;&#53440;&#51060;&#53952;&#44284; &#53812;&#48148; &#49324;&#51060;&#50640; &#53581;&#49828;&#53944;&#47484; &#48372;&#50668;&#51460; &#44163;&#51060;&#45796;. (&#53812;&#48148;&#47484; &#49324;&#50857;&#54616;&#51648; &#50506;&#45716; &#44221;&#50885;&#50640;&#45716; &#53812;&#48148;&#51032; &#50948;&#52824;&#50640; &#53581;&#49828;&#53944;&#47484; &#48372;&#50668;&#51460; &#44163;&#51060;&#45796;.) &#52628;&#44032;&#47196; &#51201;&#51208;&#54620; &#51060;&#48120;&#51648;&#47484; &#54756;&#45908; &#48512;&#48516;&#51032; &#51060;&#48120;&#51648; &#50689;&#50669;&#50640; &#54364;&#49884;&#54624; &#44163;&#51060;&#45796;. &#51060;&#45716; &#47700;&#49884;&#51648;&#47484; &#54644;&#44208;(resolved)&#54616;&#47732; &#50630;&#50612;&#51652;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#44592;&#48376;&#51201;&#51004;&#47196;, &#47700;&#49884;&#51648;&#45716; &#51221;&#51201;&#51064; &#53581;&#49828;&#53944; &#54805;&#53468;&#47196; &#54364;&#49884;&#46112; &#44163;&#51060;&#45796;. &#54616;&#51648;&#47564;,&amp;nbsp;&lt;span style="line-height: 2em; font-family: 'Courier New', monospace;"&gt;IHyperlinkListener&lt;/span&gt;&amp;nbsp;&#45716; &#47700;&#49884;&#51648;&#50640; &#54616;&#51060;&#54140;&#47553;&#53356;&#47484; &#52628;&#44032;&#54644;&#51452;&#44256;, &#53364;&#47533;&#50640; &#45824;&#54620; &#47532;&#49828;&#45320;&#47484; &#45804;&#50500;&#51456;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#50668;&#44592; &#47700;&#49884;&#51648;&#47484; &#52628;&#44032;&#54616;&#44256; &#54616;&#51060;&#54140;&#47553;&#53356; &#47532;&#49828;&#45320;&#47484; &#46321;&#47197;&#54616;&#45716; &#48169;&#48277;&#51012; &#48372;&#50668;&#51452;&#45716; &#53076;&#46300;&#44032; &#51080;&#45796;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;toolkit.decorateFormHeading(form);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;form.setHeadClient(toolkit.createButton(form.getHead(), "This is the head client", SWT.PUSH));&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;form.getToolBarManager().add(new Action("This is the toolbar") { });&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;form.getToolBarManager().update(true);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;form.addMessageHyperlinkListener(new HyperlinkAdapter());&lt;/span&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;// NEW LINE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;form.setMessage("This is an error message", IMessageProvider.ERROR);&lt;/span&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;// NEW LINE&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#50948;&#50640;&#49436; &#49688;&#51221;&#54620; &#45236;&#50857;&#51008; &#45796;&#51020;&#44284; &#44057;&#51060; &#48372;&#50668;&#51656; &#44163;&#51060;&#45796;:&lt;/p&gt;
&lt;p&gt;&lt;img title="form-message.png" src="/pages/2453756/attachments/3883707" alt="form-message.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style=""&gt;&#44536;&#47548; 5&lt;/strong&gt;: &#50640;&#47084; &#47700;&#49884;&#51648;&#50752; &#47700;&#49884;&#51648; &#54616;&#51060;&#54140;&#47553;&#53356; &#47532;&#49828;&#45320;&#47484; &#46321;&#47197;&#54620; &#54268;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;em style=""&gt;&#46300;&#47213; &#45796;&#50868; &#47700;&#45684;(Drop-Down Menus)&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;With the development of more complicated forms comes a wider variety of interactions that may be required. To help developers make useful functions quickly accessible, a new menu manager is now available. It can be retrieved and used to populate a menu which will be rendered next to the form's title when it is not empty.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Below is a code snippet demonstrating how to add a menu to your form heading (note that the changes from the message handling section have been removed):&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;toolkit.decorateFormHeading(form);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;form.setHeadClient(toolkit.createButton(form.getHead(), "This is the head client", SWT.PUSH));&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;form.getToolBarManager().add(new Action("This is the toolbar") { });&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;form.getToolBarManager().update(true);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;form.getMenuManager().add(new Action("This is the menu") { });&lt;/span&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;// NEW LINE&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When the menu button is clicked, the menu will appear at the cursor as shown below:&lt;/p&gt;
&lt;p&gt;&lt;img title="form-menu.png" src="/pages/2453756/attachments/3883709" alt="form-menu.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style=""&gt;&#44536;&#47548; 6&lt;/strong&gt;: A form with a menu&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The menu can also be accessed by right-clicking on the title or title image.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;em style=""&gt;&#46300;&#47000;&#44536; &#50532; &#46300;&#47213; &#51648;&#50896;(Drag and Drop Support)&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;In some cases, forms represent objects that have meaning to other workbench components. For instance, you could have a form based editor that allows you to edit the contents of a proprietary file type that will be referenced elsewhere. In 3.3, API has been created to add drag and drop support to your forms. This support allows you to drag your forms so they can be dropped into other areas. With this feature you would be able to, for instance, drag your form into other files to quickly and easily create references to the associated object. This saves the user from having to remember a URL or browse back to the item from a different editor.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Due to the complex nature of SWT's drag and drop functionality, a programmatic example will not be given here. The methods that can be used to add the support to your form are &lt;span style="font-family: 'Courier New', monospace;"&gt;Form.addTitleDragSupport(int operations, Transfer[] transferTypes, DragSourceListener listener)&lt;/span&gt;&amp;nbsp;and&amp;nbsp;&lt;span style="font-family: 'Courier New', monospace;"&gt;Form.addTitleDropSupport(int operations, Transfer[] transferTypes, DropTargetListener listener)&lt;/span&gt;. For more information on using these methods, see the&amp;nbsp;&lt;a href="http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/forms/widgets/Form.html" title="http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/forms/widgets/Form.html"&gt;Form class javadoc&lt;/a&gt; or the&amp;nbsp;&lt;a href="http://www.eclipse.org/articles/Article-SWT-DND/DND-in-SWT.html" title="http://www.eclipse.org/articles/Article-SWT-DND/DND-in-SWT.html"&gt;Adding Drag and Drop to an SWT Application&lt;/a&gt; [&lt;a href="/pages/2260622" title="Adding Drag and Drop to an SWT Application"&gt;&#48264;&#50669; &#47928;&#49436;&lt;/a&gt;] article from&amp;nbsp;&lt;a href="http://www.eclipse.org/articles" title="http://www.eclipse.org/articles"&gt;Eclipse Corner&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Once drag support has been properly added to the form, the title will change colours as the cursor nears and enters the draggable area. This effect is shown below.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img title="form-drag1.png" src="/pages/2453756/attachments/3883711" alt="form-drag1.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style=""&gt;&#44536;&#47548; 7&lt;/strong&gt;: A draggable form with the cursor near the title&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img title="form-drag2.png" src="/pages/2453756/attachments/3883713" alt="form-drag2.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style=""&gt;&#44536;&#47548; 8&lt;/strong&gt;: A draggable form with the cursor over the title&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&#49465;&#49496; &#54693;&#49345;(Section Improvements)&lt;/h2&gt;
&lt;p&gt;Sections have become the fundamental building blocks of most forms created today. A common approach to form design is to have several columns of adjacent sections. However, when sections are given text clients that are taller than their title text, the title area grows accordingly to accommodate the client. Unfortunately, this means that adjacent sections with similar content will not line up properly and may look sloppy.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In 3.3, new API has been added to &lt;span style="font-family: 'Courier New', monospace;"&gt;ExpandableComposite&lt;/span&gt; to allow designers to account for this limitation. There is a method,&amp;nbsp;&lt;span style="font-family: 'Courier New', monospace;"&gt;ExpandableComposite.getTextClientHeightDifference()&lt;/span&gt; that will return the number of pixels the title area was increased by to accommodate the text client. This can be used to set the &lt;span style="font-family: 'Courier New', monospace;"&gt;ExpandableComposite.descriptionVerticalSpacing&lt;/span&gt; field (default is 0) or the&amp;nbsp;&lt;span style="font-family: 'Courier New', monospace;"&gt;ExpandableComposite.clientVerticalSpacing&lt;/span&gt;&amp;nbsp;field (default is 3). These fields specify the padding to place above the description and the client area respectively. Note that if there is no description, then the &lt;span style="font-family: 'Courier New', monospace;"&gt;descriptionVerticalSpacing&lt;/span&gt; field will have no affect.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here is a code snippet from the org.eclipse.ui.forms.examples.internal.rcp.SecondPage class from the org.eclipse.ui.forms.examples plug-in that demonstrates usage of this feature:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;Section s1 = createTableSection(form, toolkit, "First Table Section", true);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;Section s2 = createTableSection(form, toolkit, "Second Table Section", false);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'Courier New', monospace;"&gt;s2.descriptionVerticalSpacing = s1.getTextClientHeightDifference();&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Below is a pair of images to demonstrate the different this makes. These screenshots were both created using the Form Examples plug-in:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img title="section-aligned.png" src="/pages/2453756/attachments/3883715" alt="section-aligned.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style=""&gt;&#44536;&#47548; 9&lt;/strong&gt;: A pair of sections aligned using getTextClientHeightDifference()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img title="section-unaligned.png" src="/pages/2453756/attachments/3883717" alt="section-unaligned.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style=""&gt;&#44536;&#47548; 10&lt;/strong&gt;: A pair of sections without custom alignment&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Shared-Header Form Editor&lt;/h2&gt;
&lt;p&gt;The &lt;span style="font-family: 'Courier New', monospace;"&gt;org.eclipse.ui.forms.editor.FormEditor&lt;/span&gt; class provides a starting point for creating multi-page editors with form pages. One common use case of this class is to use form pages that all have the same titles, head clients and toolbar items. To achieve this prior to 3.3, implementers had to have all of their child pages create the headers in the same way. This not only meant that there was a lot of overhead and code duplication involved in achieving a consistent look, but also that the editor was using system resources excessively to create copies of all the same controls.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In 3.3 the &lt;span style="font-family: 'Courier New', monospace;"&gt;org.eclipse.ui.forms.editor.SharedHeaderFormEditor&lt;/span&gt; class has been added to allow the header area to be shared among all the pages. In order to implement this properly, subclasses must override the createHeaderContents(&lt;span style="font-family: 'Courier New', monospace;"&gt;IManagedForm headerForm&lt;/span&gt;) class to populate the header. In addition, any header controls that require life cycle management should be wrapped with the IFormPartinterface. Also, child pages of the&amp;nbsp;&lt;span style="font-family: 'Courier New', monospace;"&gt;SharedHeaderFormEditor&lt;/span&gt; should not have their own header or else two headers will be displayed.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&#47700;&#49884;&#51648; &#47588;&#45768;&#51200;(Message Manager)&lt;/h2&gt;
&lt;p&gt;As discussed above, support has been added to show messages in the form heading. To make the handling of multiple messages within a form easier, a message manager has been made available in 3.3 through the &lt;span style="font-family: 'Courier New', monospace;"&gt;IManagedForm&lt;/span&gt; interface. The manager is provided as an interface (&lt;span style="font-family: 'Courier New', monospace;"&gt;IMessageManager&lt;/span&gt;).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The message manager will track multiple messages for the user at a time and will show text-based on the most severe message present at any given time (&lt;span style="font-family: 'Courier New', monospace;"&gt;ERROR &amp;gt; WARNING &amp;gt; INFO&lt;/span&gt;). It also provides the ability, when adding a message, to associate a control with it. If this is done, the message manager will decorate the specified control with an image appropriate to the message type.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If the message label in the form heading is configured to be a hyperlink (as discussed earlier in this article), the href attribute of the&amp;nbsp;&lt;span style="font-family: 'Courier New', monospace;"&gt;HyperlinkEvent&lt;/span&gt; will be an array of &lt;span style="font-family: 'Courier New', monospace;"&gt;IMessage&lt;/span&gt; objects. This array is used internally by the message manager to create a tooltip for the hyperlink. It is also available for clients to do whatever they like with the information once the link is clicked.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The advantages of this API are, first, that it inherently allows many messages to be retained on a form at once and, second, that it hides the details of how control decoration is performed.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A good example implementation of this API is in the &lt;span style="font-family: 'Courier New', monospace;"&gt;org.eclipse.ui.forms.examples.internal.rcp.ErrorMessagesPage&lt;/span&gt; class from the&amp;nbsp;&lt;span style="font-family: 'Courier New', monospace;"&gt;org.eclipse.ui.forms.examples&lt;/span&gt; plug-in. Below are two screenshots of the implementation:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img title="msgman-tooltip.png" src="/pages/2453756/attachments/3883719" alt="msgman-tooltip.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style=""&gt;&#44536;&#47548; 11&lt;/strong&gt;: An example implementation of the message manager showing its tooltip&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img title="msgman-widget.png" src="/pages/2453756/attachments/3883721" alt="msgman-widget.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style=""&gt;&#44536;&#47548; 12&lt;/strong&gt;: An example of what can be done with a HyperlinkListener using the message manager&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&#44208;&#47200;&lt;/h2&gt;
&lt;p&gt;This article has outlined the new features added to Eclipse Forms in version 3.3. Its goal was to pick up where the previous&amp;nbsp;&lt;a href="http://www.eclipse.org/articles/Article-Forms/article.html" title="http://www.eclipse.org/articles/Article-Forms/article.html"&gt;forms article&lt;/a&gt; left off and to help clients of the plug-in make better use of the tools at their disposal to increase the quality of the Rich UIs. Feedback can be sent to&amp;nbsp;&lt;a href="http://dev.eclipse.org/mailman/listinfo/platform-ua-dev" title="http://dev.eclipse.org/mailman/listinfo/platform-ua-dev"&gt;platform-ua-dev@eclipse.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Thu, 09 Sep 2010 14:45:48 +0900</pubDate>
      <link>http://eclipse-articles.springnote.com/pages/2453756</link>
      <guid>http://eclipse-articles.springnote.com/pages/2453756</guid>
    </item>
    <item>
      <title>Reading resources from a Eclipse plugin</title>
      <description>&lt;p&gt;&#50896;&#47928; : &lt;a href="http://www.dzone.com/links/r/reading_resources_from_a_eclipse_plugin.html"&gt;http://www.dzone.com/links/r/reading_resources_from_a_eclipse_plugin.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#48264;&#50669; : &#51060;&#49345;&#54984; (calm1979@gmail.com)&lt;/p&gt;
&lt;p&gt;2010&#45380; 7&#50900; 7&#51068;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Frequenty you want to store static files in your bundle and load them from your bundle. For this you can use the following code, of course replace the bundle id with your version:&lt;/p&gt;
&lt;p&gt;&#45817;&#49888;&#51008; &#51088;&#51452; &#48264;&#46308;&#50640; &#54028;&#51068;&#51012; &#51200;&#51109;&#54616;&#44256;, &#46608; &#48264;&#46308;&#50640;&#49436; &#44536;&#44163;&#51012; &#51069;&#50612;&#46308;&#51060;&#44600; &#50896;&#54620;&#45796;. &#51060; &#46412; &#45796;&#51020; &#53076;&#46300;&#47484; &#49324;&#50857;&#54624; &#49688; &#51080;&#45796;. &#47932;&#47200;, &#48264;&#46308; ID&#45716; &#45817;&#49888;&#51060; &#48148;&#45012;&#49436; &#49324;&#50857;&#54616;&#47732; &#46108;&#45796;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;Bundle bundle = Platform.getBundle("de.vogella.example.readfile");&lt;/li&gt;
&lt;li&gt;URL fileURL = bundle.getEntry("files/test.txt");&lt;/li&gt;
&lt;li&gt;File file = null;&lt;/li&gt;
&lt;li&gt;try {&lt;/li&gt;
&lt;li&gt;file = new File(FileLocator.resolve(fileURL).toURI());&lt;/li&gt;
&lt;li&gt;} catch (URISyntaxException e1) {&lt;/li&gt;
&lt;li&gt;e1.printStackTrace();&lt;/li&gt;
&lt;li&gt;} catch (IOException e1) {&lt;/li&gt;
&lt;li&gt;e1.printStackTrace();&lt;/li&gt;
&lt;li&gt;}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Alternatively you can also use URL directly. I have to thank Paul Webster for this tip.&lt;/p&gt;
&lt;p&gt;&#46608; &#45796;&#47480; &#48169;&#48277;&#51004;&#47196; &#45817;&#49888;&#51008; URL&#51012; &#51649;&#51217; &#49324;&#50857;&#54624; &#49688; &#51080;&#45796;. &#51060; &#54017;&#51012; &#51456; Paul Webster&#50640;&#44172; &#44048;&#49324;&#46300;&#47536;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;URL url;&lt;/li&gt;
&lt;li&gt;try {&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url = new URL("platform:/plugin/de.vogella.rcp.plugin.filereader/files/test.txt");&lt;/li&gt;
&lt;li&gt;InputStream inputStream = url.openConnection().getInputStream();&lt;/li&gt;
&lt;li&gt;BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));&lt;/li&gt;
&lt;li&gt;String inputLine;&lt;/li&gt;
&lt;li&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;while ((inputLine = in.readLine()) != null) {&lt;/li&gt;
&lt;li&gt;System.out.println(inputLine);&lt;/li&gt;
&lt;li&gt;}&lt;/li&gt;
&lt;li&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;in.close();&lt;/li&gt;
&lt;li&gt;} catch (IOException e) {&lt;/li&gt;
&lt;li&gt;e.printStackTrace();&lt;/li&gt;
&lt;li&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I believe the second option is the better one, as you avoid a dependency to the class Platform.&lt;/p&gt;
&lt;p&gt;Platform &#53364;&#47000;&#49828;&#50640; &#51032;&#51316;&#49457;&#51012; &#50630;&#50528;&#51452;&#45716; &#46160;&#48264;&#51704; &#48169;&#48277;&#51060; &#45908; &#51339;&#51008; &#44163; &#44057;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Wed, 07 Jul 2010 11:11:52 +0900</pubDate>
      <link>http://eclipse-articles.springnote.com/pages/6040709</link>
      <guid>http://eclipse-articles.springnote.com/pages/6040709</guid>
    </item>
    <item>
      <title>Draw2D&#50640;&#49436;&#51032; &#47112;&#51060;&#50500;&#50883;&#51032; &#44060;&#50836;</title>
      <description>&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50896;&#47928; :&amp;nbsp;&lt;a href="http://www13.plala.or.jp/observe/draw2d/draw2d_layout.html"&gt;http://www13.plala.or.jp/observe/draw2d/draw2d_layout.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#48264;&#50669; : &#45576;&#47932;&#54620;&#48169;&#50872;(&lt;a href="/pages/mailto:asdzzx@gmail.com"&gt;asdzzx@gmail.com&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;2009&#45380; 9&#50900; 1&#51068;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;Draw2D&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50640;&#49436;&#51032; &#47112;&#51060;&#50500;&#50883;&#51032;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#44060;&#50836;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51060;&#48264;&#50640;&#45716;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;Draw2D&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47484;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#49324;&#50857;&#54620; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#50640;&#49436; &#54588;&#44200;&#47484; &#48176;&#52824; &#54616;&#44592;&#50948;&#54644; &#49324;&#50857;&#46104;&#44256; &#51080;&#45716; &#47112;&#51060;&#50500;&#50883;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#12539;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47588;&#45768;&#51200;&#47484;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47751; &#44060;&#51032; &#49368;&#54540;&#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#53685;&#54616;&#50668; &#49548;&#44060;&#54616;&#44256;&#51088; &#54633;&#45768;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#9632;&lt;/span&gt;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47112;&#51060;&#50500;&#50883;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#12539;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47588;&#45768;&#51200;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;Java&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47484; &#49324;&#50857;&#54620;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;GUI&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#51089;&#49457;&#54620; &#44221;&#54744;&#51060; &#51080;&#45716; &#48516;&#51060;&#46972;&#47732;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;BorderLayout&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#46608;&#45716;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;GridLayout&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#46321;&#51032; &#47751; &#44032;&#51648;&#51032; &#47112;&#51060;&#50500;&#50883;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#12539;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47588;&#45768;&#51200;&#47484; &#49324;&#50857;&#54620; &#44221;&#54744;&#51060; &#51080;&#51004;&#49884;&#44192;&#51424;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;Draw2D&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50640;&#49436;&#46020;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50948;&#50752; &#44057;&#51008; &#47112;&#51060;&#50500;&#50883;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#12539;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47588;&#45768;&#51200;&#47484; &#49324;&#50857;&#54616;&#50668; &#54588;&#44200;&#47484; &#48176;&#52824;&#54616;&#44256; &#51080;&#49845;&#45768;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50696;&#47484; &#46308;&#50612;&#49436;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;Draw2D&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50640;&#46020;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;FlowLayout&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#46972;&#44256; &#48520;&#47532;&#45716; &#47112;&#51060;&#50500;&#50883;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#12539;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47588;&#45768;&#51200;&#44032; &#51316;&#51116;&#54633;&#45768;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51060; &#47112;&#51060;&#50500;&#50883;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#12539;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47588;&#45768;&#51200;&#51032; &#44592;&#45733;&#51008;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;java.awt.FlowLayout&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#44284; &#44144;&#51032; &#46041;&#51068;&#54616;&#47728;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;XYLayout&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51008;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#48176;&#52824;&#54624; &#44033; &#54588;&#44200;&#47560;&#45796;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;XY&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51340;&#54364;&#47484; &#51648;&#51221;&#54616;&#50668; &#48176;&#52824;&#54616;&#45716; &#47112;&#51060;&#50500;&#50883;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#12539;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47588;&#45768;&#51200;&#51077;&#45768;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50948;&#50752; &#44057;&#51060;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;Draw2D&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50640;&#49436; &#49324;&#50857;&#46104;&#45716; &#47112;&#51060;&#50500;&#50883;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#12539;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47588;&#45768;&#51200;&#45716;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#44536; &#51060;&#47492;&#50640;&#49436;&#48512;&#53552; &#44592;&#45733;&#51012; &#52628;&#52769;&#54624; &#49688; &#51080;&#45716; &#44163;&#46308;&#51077;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#45768;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#54616;&#51648;&#47564;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47112;&#51060;&#50500;&#50883;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#12539;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47588;&#45768;&#51200;&#50752; &#44057;&#51008; &#44163;&#46308;&#51008; &#49892;&#51228;&#47196; &#49324;&#50857;&#54644; &#48372;&#51648; &#50506;&#44256;&#49436;&#45716; &#51060;&#54644;&#54624; &#49688; &#50630;&#51012; &#44163;&#51077;&#45768;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#44536;&#47000;&#49436;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;, Draw2D&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50640; &#54252;&#54632;&#46104;&#50612; &#51080;&#45716; &#47112;&#51060;&#50500;&#50883;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#12539;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47588;&#45768;&#51200; &#51473; &#47751;&#44032;&#51648;&#47484; &#52292;&#53469;&#54616;&#50668;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#44536; &#49368;&#54540;&#51012; &#51089;&#49457;&#54644; &#48372;&#46020;&#47197; &#54633;&#49884;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#9632;&lt;/span&gt;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#49368;&#54540;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#12539;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#51089;&#49457;&#54616;&#44592; &#50948;&#54620; &#51456;&#48708;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;(ECLIPSE_HOME&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51008;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;Eclipse&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#44032; &#49444;&#52824; &#46104;&#50612;&#51652; &#46356;&#47113;&#53664;&#47532;&#51077;&#45768;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#46608;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#48260;&#51260;&#51060;&#45208;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#54540;&#47019;&#54268;&#50640;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51032;&#54644;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#49436;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47751;&#44060;&#51032;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#54028;&#51068;&#51008;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51064;&#49828;&#53672;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50948;&#52824;&#44032;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#45796;&#47484; &#49688; &#51080;&#49845;&#45768;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;(&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;em class="underline"&gt;&lt;span style="COLOR: #993300;"&gt;&#50669;&#51452;&lt;/span&gt;&lt;span style="COLOR: #993300;"&gt;: jar&lt;/span&gt;&lt;span style="COLOR: #993300;"&gt;&#54028;&#51068;&#51008; &#51060;&#44275;&#50640;&#49436; &#51228;&#44277;&#46104;&#51648; &#50506;&#49845;&#45768;&#45796; &#44396;&#44544;&#44160;&#49353;&#46321;&#51012; &#51060;&#50857;&#54644; &#51452;&#49464;&#50836;.&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;)&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li class="MsoNormal"&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;ECLIPSE_HOME/plugins/org.eclipse.draw2d_2.1.2/draw2d.jar&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li class="MsoNormal"&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;ECLIPSE_HOME/plugins/org.eclipse.jface_2.1.2/jface.jar&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li class="MsoNormal"&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;ECLIPSE_HOME/plugins/org.eclipse.core.boot_2.1.2/boot.jar&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li class="MsoNormal"&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;ECLIPSE_HOME/plugins/org.eclipse.core.runtime_2.1.1/runtime.jar&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;ECLIPSE_HOME/plugins/org.eclipse.swt.win32_2.1.2/ws/win32/swt.jar&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51060;&#48264;&#50640; &#51089;&#49457;&#54624; &#49368;&#54540;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#12539;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#49892;&#54665;&#54616;&#44592; &#50948;&#54644;&#49436;&#45716;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;VM&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51064;&#49688;&#47196;&#49436;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;SWT&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#46972;&#51060;&#48652;&#47084;&#47532;&#51032; &#54056;&#49828;&#47484; &#51648;&#51221;&#54624; &#54596;&#50836;&#44032; &#51080;&#49845;&#45768;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#45796;&#47564;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51060; &#51064;&#49688;&#45716;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#49324;&#50857;&#54616;&#45716; &#54540;&#47019;&#54268;&#51060;&#45208; &#48260;&#51260;&#50640; &#51032;&#54644;&#49436; &#45796;&#47484; &#49688; &#51080;&#49845;&#45768;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50500;&#47000;&#45716;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;Win32&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50752;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;SWT&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#48260;&#51260;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;2.1.2&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51012; &#49324;&#50857;&#54620; &#44221;&#50864;&#51032; &#50696;&#51077;&#45768;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;-Djava.library.path=C:\eclipse\plugins\org.eclipse.swt.win32_2.1.2\os\win32\x86&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51060; &#51312;&#51089;&#51032; &#51088;&#49464;&#54620; &#51221;&#48372;&#50640; &#44288;&#54644;&#49436;&#45716;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;Eclipse&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51032;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;Help&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47700;&#45684;&#51032;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;strong&gt;&lt;span style="COLOR: black;"&gt;Java development user guide &amp;gt; Reference &amp;gt; Preferences &amp;gt; Java &amp;gt; Build Path&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif; COLOR: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif; COLOR: black;"&gt;&#46608;&#45716;, &lt;strong&gt;J&lt;/strong&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif; COLOR: black;"&gt;&lt;strong&gt;ava development user guide &amp;gt; Tasks &amp;gt; Running and Debugging &amp;gt; Remote Debugging &amp;gt;&lt;/strong&gt;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;strong&gt;Using the remote Java application launch&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;strong&gt;configuration&lt;/strong&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51012; &#52280;&#51312;&#54644; &#51452;&#49464;&#50836;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#46608;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;SWT&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50640; &#44288;&#54644;&#49436;&#45716;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;a href="http://www13.plala.or.jp/observe/swt/swt_overview.html"&gt;&lt;span&gt;&#51060;&#44275;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51012; &#52280;&#51312;&#54644; &#51452;&#49464;&#50836;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;. (&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;em class="underline"&gt;&lt;span style="COLOR: maroon;"&gt;&#50669;&#51452;&lt;/span&gt; &lt;span style="COLOR: maroon;"&gt;:&lt;/span&gt; &lt;span style="COLOR: maroon;"&gt;&#51060;&#53364;&#47549;&#49828; &#48260;&#51260;&#50640; &#46384;&#46972; &#49444;&#51221; &#48169;&#48277; &#46608;&#45716; &#54764;&#54532; &#47700;&#45684;&#44032; &#45796;&#47484; &#49688; &#51080;&#49845;&#45768;&#45796;&lt;/span&gt;&lt;span style="COLOR: maroon;"&gt;.&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;)&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#9632;&lt;/span&gt; &lt;span&gt;FlowLayout&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51032; &#49368;&#54540;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#12539;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#44536;&#47084;&#47732;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;, &#47676;&#51200;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;strong&gt;&lt;span&gt;org.eclipse.draw2d.FlowLayout&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#53364;&#47000;&#49828;&#47484; &#49324;&#50857;&#54620; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#51089;&#49457;&#54644; &#48389;&#49884;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50864;&#49440;&#51008;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51204; &#44053;&#51340;&#50640;&#49436; &#51089;&#49457; &#54616;&#50688;&#45912; &#54532;&#47196;&#51229;&#53944;&#50640;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;strong&gt;&lt;span&gt;example.draw2dlayout&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#54056;&#53412;&#51648;&#47484;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#52628;&#44032;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#54644;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#48389;&#49884;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#45796;&#51020;&#51008;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#52628;&#44032;&#54616;&#49888;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#54056;&#53412;&#51648;&#50640;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;main()&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47700;&#49548;&#46300;&#47484; &#44032;&#51652; &#53364;&#47000;&#49828;&#47484; &#52628;&#44032;&#54644; &#48389;&#49884;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51473;&#50836;&#54620; &#44163;&#51008;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#49800;&#54140; &#53364;&#47000;&#49828;&#47196;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;strong&gt;&lt;span&gt;org.eclipse.jface.window.ApplicationWindow&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47484;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51648;&#51221;&#54616;&#44256;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#53364;&#47000;&#49828;&#47749;&#51008;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;strong&gt;&lt;span&gt;LayoutExample&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51060;&#46972;&#44256; &#51077;&#47141;&#54644;&#51452;&#49464;&#50836;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#45796;&#51020;&#50640;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;FlowExample&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50640;&#49436;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;strong&gt;&lt;span&gt;org.eclipse.jface.window.Window#createContents&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47700;&#49548;&#46300;&#47484; &#50724;&#48260;&#46972;&#51060;&#46300;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;(override)&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#54616;&#50668; &#50500;&#47000;&#50752; &#44057;&#51060; &#51089;&#49457;&#54644; &#51452;&#49464;&#50836;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#46608;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;main()&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47700;&#49548;&#46300;&#46020;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50500;&#47000;&#50752;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#44057;&#51060;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51089;&#49457;&#54644;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51452;&#49464;&#50836;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47532;&#49828;&#53944;&#65297;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;:LayoutExample.java&lt;/span&gt;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif; FONT-SIZE: small;"&gt;import org.eclipse.draw2d.Button;&lt;br /&gt;
import org.eclipse.draw2d.Figure;&lt;br /&gt;
import org.eclipse.draw2d.FlowLayout;&lt;br /&gt;
import org.eclipse.draw2d.IFigure;&lt;br /&gt;
import org.eclipse.draw2d.LightweightSystem;&lt;br /&gt;
import org.eclipse.jface.window.ApplicationWindow;&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.widgets.Canvas;&lt;br /&gt;
import org.eclipse.swt.widgets.Composite;&lt;br /&gt;
import org.eclipse.swt.widgets.Control;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
&lt;br /&gt;
public class LayoutExample extends ApplicationWindow {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; public LayoutExample(){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; super(null); // &#52572;&#49345;&#50948;&#47112;&#48296;&#12539;&#50952;&#46020;&#50864;&#51064;&#44221;&#50864; null&#51012; &#49444;&#51221;&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; public static void main(String[] args) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // &#52572;&#49345;&#50948;&#47112;&#48296;&#12539;&#50952;&#46020;&#50864;&#51012; &#51089;&#49457;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; LayoutExample window = new LayoutExample();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; window.setBlockOnOpen(true);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; window.open();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Display.getCurrent().dispose();&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; // &#53364;&#46972;&#51060;&#50616;&#53944; &#50689;&#50669;&#51012; &#51089;&#49457;&lt;br /&gt;
&amp;nbsp; protected Control createContents(Composite parent) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Canvas canvas = new Canvas(parent,SWT.NONE);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; LightweightSystem lws = new LightweightSystem(canvas);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IFigure panel = new Figure();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // &#47112;&#51060;&#50500;&#50883;&#12539;&#47588;&#45768;&#51256;&#47484; &#49444;&#51221;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; FlowLayout layout = new FlowLayout();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; layout.setHorizontal(true); // &#44592;&#48376;&#44050;&#46020; true&#51648;&#47564; &#51068;&#45800;.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; panel.setLayoutManager(layout);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; panel.add(new Button("button" + i));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lws.setContents(panel);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return canvas;&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
}&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#9632;&lt;/span&gt;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#49892;&#54665;&lt;/span&gt;&lt;/h3&gt;
&lt;hr /&gt;
&lt;p style="TEXT-INDENT: -12pt; MARGIN-LEFT: 12pt;"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#44536;&#47084;&#47732;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51060; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#49892;&#54665;&#54644; &#48389;&#49884;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#49892;&#54665;&#49884;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;, SWT&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#46972;&#51060;&#48652;&#47084;&#47532;&#51032;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;path&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47484;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;a href="http://www13.plala.or.jp/observe/draw2d/draw2d_layout.html#VM_Path"&gt;&lt;span&gt;VM&lt;/span&gt;&#51064;&#49688;&lt;/a&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50640; &#49444;&#51221;&#54616;&#45716; &#44163;&#51012; &#51082;&#51648;&#47568;&#50500;&#51452;&#49464;&#50836;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style="TEXT-INDENT: -12pt; MARGIN-LEFT: 12pt;"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51060; &#44592;&#46041;&#46104;&#50612;&#51276;&#45796;&#47732;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50952;&#46020;&#50864; &#49324;&#51060;&#51592;&#47484;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#48320;&#44221;&#54644;&#48372;&#49464;&#50836;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#46608;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;strong&gt;&lt;span&gt;setHorizontal()&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47700;&#49548;&#46300;&#47196;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;strong&gt;&lt;span&gt;false&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#47484; &#49444;&#51221;&#54644;&#49436; &#49892;&#54665;&#54644;&#48372;&#49464;&#50836;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="TEXT-INDENT: -12pt; MARGIN-LEFT: 12pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;table class="dataTable2"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50952;&#46020;&#50864; &#54253;&#51012; &#51460;&#51064; &#44221;&#50864;&lt;/span&gt;&lt;/p&gt;
&lt;/th&gt;
&lt;th&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50952;&#46020;&#50864; &#54253;&#51012; &#45331;&#55180; &#44221;&#50864;&lt;/span&gt;&lt;/p&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p style="TEXT-ALIGN: center;"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;img title="figure1.jpg" class="attachment" src="/pages/3683263/attachments/2063595" alt="figure1.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="TEXT-ALIGN: center;"&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;img title="figure2.jpg" class="attachment" src="/pages/3683263/attachments/2063597" alt="figure2.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;&#9632;&lt;/span&gt; &lt;span&gt;XYLayout&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51032;&#49368;&#54540; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&lt;/span&gt;&lt;/h3&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#45796;&#51020;&#51008;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;,&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;strong&gt;&lt;span&gt;org.eclipse.draw2d.XYLayout&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#53364;&#47000;&#49828;&#47484; &#49324;&#50857;&#54620; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#51089;&#49457;&#54644; &#48389;&#49884;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51312;&#44552; &#51204;&#50640; &#49324;&#50857;&#54620;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;LayoutExample&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#53364;&#47000;&#49828;&#47484; &#44536;&#45824;&#47196; &#49324;&#50857;&#54616;&#44192;&#49845;&#45768;&#45796;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#44536;&#47084;&#47732;&lt;/span&gt; &lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;LayoutExample&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#53364;&#47000;&#49828;&#47484; &#50500;&#47000;&#50752; &#44057;&#51060; &#48320;&#44221;&#54644;&#51452;&#49464;&#50836;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif; FONT-SIZE: small;"&gt;&#47532;&#49828;&#53944;&#65298;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;:LayoutExample.java&lt;/span&gt;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;import org.eclipse.draw2d.Button;&lt;br /&gt;
import org.eclipse.draw2d.Figure;&lt;br /&gt;
import org.eclipse.draw2d.IFigure;&lt;br /&gt;
import org.eclipse.draw2d.LightweightSystem;&lt;br /&gt;
import org.eclipse.draw2d.XYLayout;&lt;br /&gt;
import org.eclipse.draw2d.geometry.Rectangle;&lt;br /&gt;
import org.eclipse.jface.window.ApplicationWindow;&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.widgets.Canvas;&lt;br /&gt;
import org.eclipse.swt.widgets.Composite;&lt;br /&gt;
import org.eclipse.swt.widgets.Control;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
&lt;br /&gt;
public class LayoutExample extends ApplicationWindow {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; public LayoutExample() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; super(null); // &#52572; &#49345;&#50948; &#50952;&#46020;&#50864;&#51068; &#44221;&#50864; null&#51012; &#49444;&#51221;&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; public static void main(String[] args) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // &#52572;&#49345;&#50948; &#50952;&#46020;&#50864;&#51032; &#51089;&#49457;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; LayoutExample window = new LayoutExample();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; window.setBlockOnOpen(true);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; window.open();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Display.getCurrent().dispose();&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; // &#53364;&#46972;&#51060;&#50616;&#53944; &#50689;&#50669;&#51032; &#51089;&#49457;&lt;br /&gt;
&amp;nbsp; protected Control createContents(Composite parent) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Canvas canvas = new Canvas(parent, SWT.NONE);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; LightweightSystem lws = new LightweightSystem(canvas);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IFigure panel = new Figure();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // &#47112;&#51060;&#50500;&#50883; &#47588;&#45768;&#51256;&#51032; &#49444;&#51221;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; panel.setLayoutManager(new XYLayout());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Button button;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Random r = new Random();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; button = new Button("button" + i);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &#45212;&#49688;&#47484; &#49324;&#50857;&#54616;&#50668; &#49324;&#44033;&#54805;&#51012; &#51089;&#49457;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rectangle constraint =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new Rectangle(r.nextInt(200), r.nextInt(200), -1, -1); // &#9312;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; panel.add(button); // &#48152;&#46300;&#49884;setConstraint &#48372;&#45796; &#50526;&#50640; &#52628;&#44032;&#54644;&#51452;&#49464;&#50836;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Constraint(&#51228;&#50557;&#51012; &#49444;&#51221;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; panel.setConstraint(button, constraint);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lws.setContents(panel);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return canvas;&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
}&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#50948;&#51032; &#53076;&#46300;&#50640;&#49436; &#8220;&lt;/span&gt;&#9312;&#8221; &#54364;&#49884;&#44032; &#46104;&#50612;&#51652; &#48512;&#48516;&#50640; &#51452;&#47785;&#51012; &#54644;&#51452;&#49464;&#50836;.&#51060; &#44275;&#50640;&#49436;&#45716; &#54588;&#44200; &lt;span&gt;(Button)&lt;/span&gt;&#50640; &#44288;&#54620;&lt;strong&gt;&lt;span&gt;Constraint(&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&#51228;&#50557;&lt;/strong&gt;&lt;strong&gt;&lt;span&gt;)&lt;/span&gt;&lt;/strong&gt;&#51012; &#49440;&#50616;&#54616;&#45716; &lt;span&gt;Rectangle&lt;/span&gt;&#50724;&#48652;&#51229;&#53944;&#47484; &#51089;&#49457;&#54616;&#44256; &#51080;&#49845;&#45768;&#45796;. &lt;span&gt;Constraint&lt;/span&gt;&#46972;&#45716; &#44163;&#51008;,&#54868;&#47732;&#50640; &#48176;&#52824;&#46104;&#50612;&#51656; &#44033; &#54588;&#44200;&#47560;&#45796; &#49444;&#51221;&#46104;&#50612;&#51648;&#45716; &#44163;&#51004;&#47196;,&#44033; &#54588;&#44200;&#51032; &#49324;&#51060;&#51592; &#50752; &#50948;&#52824;&#47484; &#51648;&#51221;&#54624;&#49688; &#51080;&#49845;&#45768;&#45796;.&#46608;&#54620;, &lt;span&gt;XYLayout&lt;/span&gt;&#50640; &#51080;&#50612;&#49436;&#45716; &lt;span&gt;Rectangle&lt;/span&gt;&#53364;&#47000;&#49828; &#47564;&#51060;&lt;span&gt;Constraint&lt;/span&gt;&#51060; &#46112;&#49688; &#51080;&#49845;&#45768;&#45796;.&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#46608;,&#8220;&lt;/span&gt;&#9312;&#8221;&#51032; &#53076;&#46300;&#50640;&#49436; &lt;span&gt;Rectangle&lt;/span&gt;&#51032; &#45320;&#48708;&#50752; &#45458;&#51060;&#47484; &#51648;&#51221;&#54616;&#45716; &#51064;&#49688; &lt;span&gt;(&lt;/span&gt;&#51228;&lt;span&gt;3&lt;/span&gt;&#51064;&#49688;&lt;span&gt;,&lt;/span&gt;&#51228;&lt;span&gt;4&lt;/span&gt;&#51064;&#49688;&lt;span&gt;)&lt;/span&gt;&#50640; &#8216;&lt;span&gt;-1&lt;/span&gt;&#8217;&#51060; &#49444;&#51221;&#46104;&#50612; &#51080;&#49845;&#45768;&#45796;&lt;span&gt;.&lt;/span&gt;&#51060;&#47111;&#44172; &#54632;&#51004;&#47196;&#50024; &#47112;&#51060;&#50500;&#50883;&lt;span&gt;&#12539;&lt;/span&gt;&#47588;&#45768;&#51256;&#44032; &#44033;&#54588;&#44200;&#50640;&#44172;&lt;span&gt;,&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#44536;&#54588;&#44200;&#44032; &#51201;&#51208;&#55176; &#54364;&#49884;&#46104;&#50612; &#51656; &#49688;&#51080;&#45716; &#52572;&#49548;&#49324;&#51060;&#51592;&#47484; &#52712;&#46301;&#54616;&#50668; &#54588;&#44200;&#51032; &#49324;&#51060;&#51592;&#47484; &#49444;&#51221;&#54616;&#44172;&#46121;&#45768;&#45796;&lt;/span&gt;.&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51060;&#48264;&#50696;&#51228;&#51032; &#48260;&#53948;&#54588;&#44200;&#44057;&#51008; &#44221;&#50864;&#50640;&#45716; &#53581;&#49828;&#53944;&#51032; &#49324;&#51060;&#51592;&#47484; &#44592;&#51456;&#51004;&#47196; &#54616;&#44256; &#51080;&#49845;&#45768;&#45796;&lt;/span&gt;.&lt;/p&gt;
&lt;p style="TEXT-INDENT: -12pt; MARGIN-LEFT: 10pt;"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#9632; &#49892;&#54665;&lt;/span&gt;&lt;/h3&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#44536;&#47084;&#47732; &#51060;&#51204;&#44284; &#46041;&#51068;&#54616;&#44172; &#49892;&#54665;&#54644;&#48389;&#49884;&#45796;.&#51060;&#48264;&#50640;&#45716; &#45212;&#49688;&#47484; &#49324;&#50857;&#54644; &#48176;&#52824;&#54616;&#50688;&#44592; &#46412;&#47928;&#50640;,&#49892;&#54665;&#44208;&#44284;&#44032; &#47588;&#48264; &#45796;&#47480;&#44163;&#51012; &#54869;&#51064;&#54624; &#49688; &#51080;&#49845;&#45768;&#45796;&#47564;, &#54588;&#44200;&#47484; &#50612;&#46356;&#46304;&#51648; &#51088;&#50976;&#47213;&#44172; &#48176;&#52824;&#54624;&#49688; &#51080;&#45796;&#45716; &#44163;&#51012; &#54869;&#51064;&#54624; &#49688; &#51080;&#45796;&#47732; &#51339;&#44192;&#49845;&#45768;&#45796;.&lt;/span&gt;&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center;"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;img title="figure3.jpg" class="attachment" src="/pages/3683263/attachments/2063635" alt="figure3.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center;"&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#9632;&#45149;&#47610;&#51020;&lt;/span&gt;&lt;/h3&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;Draw2D&lt;/span&gt;&#50640;&#45716;,&#51060;&#48264;&#50640; &#49324;&#50857;&#54620; &#44163; &#51060;&#50808;&#50640;&#46020; &#50668;&#47084;&#44032;&#51648;&#51032; &#47112;&#51060;&#50500;&#50883;&#12539;&#47588;&#45768;&#51256;&#44032; &#51080;&#49845;&#45768;&#45796;.&#53356;&#44172; &#45208;&#45576;&#45796;&#47732; &lt;span&gt;2&lt;/span&gt;&#44032;&#51648;&#51032;&#44228;&#50676;&#51004;&#47196; &#51060;&#47364;&#51256; &#51080;&#49845;&#45768;&#45796;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#44536;&#51473; &#54616;&#45208;&#45716;&lt;/span&gt; FlowLayout&#47196; &#45824;&#54364;&#46104;&#45716; &lt;span&gt;Order&lt;/span&gt;&#44228;&#51077;&#45768;&#45796;&lt;span&gt;.&lt;/span&gt;&#51060; &#44228;&#50676;&#50640;&#49436;&#45716; &#54588;&#44200;&#51032; &#50948;&#52824;&#45716; &#48176;&#52824;&#46104;&#50612;&#51652;&#49692;&#49436;&#45824;&#47196;&#44208;&#51221;&#46104;&#50612;&#51665;&#45768;&#45796;&lt;span&gt;.&lt;/span&gt;&#46608;&amp;nbsp; &#49324;&#51060;&#51592;&#50640;&#44288;&#54644;&#49436;&#46020;&#44033;&#54588;&#44200;&#51032; &lt;span&gt;getPreferredSize()&lt;/span&gt;&#47700;&#49548;&#46300;&#50640;&#49436; &#52572;&#49548;&#49324;&#51060;&#51592;&#47484; &#51648;&#51221;&#54616;&#45716;&#44163; &#51060;&#50808;&#50640;&#45716; &#47112;&#51060;&#50500;&#50883;&#12539;&#47588;&#45768;&#51256;&#50640;&#44172; &#47585;&#44609;&#45768;&#45796;.&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#46608; &#54620;&#44032;&#51648;&#45716;&lt;/span&gt;, XYLayout&#47196; &#45824;&#54364;&#46104;&#45716; &lt;span&gt;Constraint&lt;/span&gt;&#44228;&#51077;&#45768;&#45796;&lt;span&gt;.&lt;/span&gt; &#51060; &#44228;&#50676;&#50640;&#49436;&#45716;&lt;span&gt;,&lt;/span&gt;&#51228;&#50557;&#50724;&#48652;&#51229;&#53944;&lt;span&gt;(Constraint)&lt;/span&gt;&#47484; &#49324;&#50857;&#54644; &#44033;&#54588;&#44200;&#47560;&#45796; &#50948;&#52824;&#50752; &#49324;&#51060;&#51592; &#47784;&#46160;&#47484; &#51648;&#51221;&#54633;&#45768;&#45796;&lt;span&gt;.&lt;/span&gt; &#51593;&lt;span&gt;,&lt;/span&gt;&#47112;&#51060;&#50500;&#50883;&lt;span&gt;&#183;&lt;/span&gt;&#47588;&#45768;&#51200;&#50640;&#49436;&#45716;&amp;nbsp; &#44033;&#54588;&#44200;&#51032; &#50948;&#52824;&#45208; &#49324;&#51060;&#51592;&#47484; &#44228;&#49328;&#54616;&#51648;&#50506;&#44256;&lt;span&gt;,&lt;/span&gt;&#45824;&#48512;&#48516; &#44256;&#51221;&#51032; &#54589;&#49472;&#51648;&#51221;&#44284; &#44057;&#44172;&#46121;&#45768;&#45796;&lt;span&gt;.&lt;/span&gt; &#46384;&#46972;&#49436;&lt;span&gt;, Constraint&lt;/span&gt;&#44228;&#51032; &#47112;&#51060;&#50500;&#50883;&lt;span&gt;&#183;&lt;/span&gt;&#47588;&#45768;&#51200;&#45716;&lt;span&gt;,&lt;/span&gt;&#51068;&#48152;&#51201;&#51004;&#47196; &#47560;&#50864;&#49828;&#51032;&amp;nbsp; &#46300;&#47000;&#44536;&#51312;&#51089;&#51004;&#47196;&#54588;&#44200;&#51032; &#50948;&#52824;&#47484;&#51088;&#50976;&#47213;&#44172;&amp;nbsp; &#48320;&#44221;&#54624;&#49688;&#51080;&#45716;&#44221;&#50864;&#50640; &#49324;&#50857;&#46121;&#45768;&#45796;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#9632;&#52280;&#44256;&#47928;&#54732;&lt;/span&gt;&lt;/h3&gt;
&lt;hr /&gt;
&lt;ul&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;Eclipse&lt;/span&gt;&#49324;&#51060;&#53944;&lt;span&gt;(&lt;a href="http://www.eclipse.org/"&gt;http://www.eclipse.org/&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal"&gt;
&lt;p&gt;&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;GEF&lt;/span&gt;&#47928;&#49436;&#50752; Draw2D&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&#51032;&lt;/span&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;Javadoc&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li class="MsoNormal"&gt;
&lt;p&gt;&lt;span style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: &#44404;&#47548;&#52404;, San-Serif;"&gt;&lt;span&gt;Eclipse&lt;/span&gt;&#49324;&#51060;&#53944;&#45236;&#51032; &#44544;&#65306;&lt;a href="http://www.eclipse.org/articles/Article-GEF-Draw2d/GEF-Draw2d.html"&gt;Display a UML Diagram using Draw2D&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Tue, 01 Sep 2009 13:27:42 +0900</pubDate>
      <link>http://eclipse-articles.springnote.com/pages/3683263</link>
      <guid>http://eclipse-articles.springnote.com/pages/3683263</guid>
    </item>
    <item>
      <title>Draw2D &#51077;&#47928;</title>
      <description>&lt;p&gt;&#50896;&#47928; :&amp;nbsp;&lt;a href="http://www13.plala.or.jp/observe/draw2d/draw2d_overview.html"&gt;http://www13.plala.or.jp/observe/draw2d/draw2d_overview.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#48264;&#50669; : &#45576;&#47932;&#54620;&#48169;&#50872;(&lt;a href="/pages/mailto:asdzzx@gmail.com"&gt;asdzzx@gmail.com&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;2009&#45380; 6&#50900; 19&#51068;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Draw2D&#51077;&#47928;&lt;/h1&gt;
&lt;p style="MARGIN-LEFT: 2em;"&gt;&#51060;&#48264;&#50640;&#45716;,&amp;nbsp;Eclipse&#51032; &#54540;&#47084;&#44536;&#51064;&#51064;&amp;nbsp;GEF(Graphical Editing Framework)&#50640; &#54252;&#54632;&#46104;&#50612;&amp;nbsp;&#51080;&#45716;,&amp;nbsp;Draw2D&amp;nbsp;&#54540;&#47084;&#44536;&#51064;&#51032; &#44060;&#50836;&#47484; &#49548;&#44060;&#54616;&#44192;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;span style="FONT-SIZE: x-large;"&gt;Draw2D&#45716;&#65311;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Draw2D&#45716;,&amp;nbsp;GEF&#50640; &#48512;&#49549;&#46104;&#50612;,&amp;nbsp;&#50668;&#47084;&#44032;&#51648;&#51032; &#54805;&#49345;&#51012; &#44536;&#47532;&#44592; &#50948;&#54620;&amp;nbsp;Eclipse&#51032; &#54540;&#47084;&#44536;&#51064;&#51077;&#45768;&#45796;. &#54616;&#51648;&#47564;,&amp;nbsp;Draw2D&#45716;&amp;nbsp;GEF&#50640;&#46020;&amp;nbsp;Eclipse&#50640;&#46020; &#51032;&#51316;&#54616;&#51648; &#50506;&#44256;,&amp;nbsp;&#45800;&#46021;&#51004;&#47196; &#49324;&#50857;&#54616;&#45716; &#44163;&#51060; &#44032;&#45733;&#54633;&#45768;&#45796;.&amp;nbsp;(SWT&#50640;&#45716; &#51032;&#51316;&#54616;&#44256;&#51080;&#49845;&#45768;&#45796;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Draw2D&#50640;&#45716;,&amp;nbsp;&#47566;&#51008; &#44396;&#49457;&#50836;&#49548;&#44032; &#51316;&#51116;&#54616;&#44256; &#51080;&#49845;&#45768;&#45796;.&amp;nbsp;&#44536; &#51473;&#50640;&#49436; &#44845; &#50508;&#50500; &#46160;&#49492;&#50556; &#54624; &#51473;&#50836;&#54620; &#50836;&#49548;&#45716; &#50500;&#47000;&#50752; &#44057;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&#54588;&#44200;(Figure)&lt;/strong&gt;&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 2em;"&gt;&#54588;&#44200;&#45716;,&amp;nbsp;Draw2D&#50640;&#49436; &#54805;&#49345;&#44284; &#47928;&#51088;&#47484; &#44536;&#47532;&#44592; &#50948;&#54644;&#49436; &#49324;&#50857;&#46104;&#50612;&#51648;&#45716; &#44536;&#47000;&#54589;&amp;nbsp;&#50724;&#48652;&#51229;&#53944;&#51077;&#45768;&#45796;. &#46608;&#54620;, &#54588;&#44200;&#45716; &#48372;&#53685;&#51032; &#50948;&#51247;&#44284; &#47560;&#52268;&#44032;&#51648;&#47196;&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 2em;"&gt;&#48512;&#47784;/&#51088;&#49885;&#44288;&#44228;&#47484; &#44032;&#51648;&#45716; &#44163;&#51060; &#44032;&#45733;&#54616;&#50668;, &#44033; &#54588;&#44200;&#47560;&#45796; &#47560;&#50864;&#49828;&amp;nbsp;&#51060;&#48292;&#53944; &#46321;&#51032; &#51060;&#48292;&#53944;&#44032; &#48372;&#45236;&#51256; &#50741;&#45768;&#45796;.&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 2em;"&gt;&#54588;&#44200;&#53364;&#47000;&#49828;&#45716; org.eclipse.draw2d.IFigure&#51064;&#53552;&#54168;&#51060;&#49828;&#47484; &#44396;&#54788;&#54620; &#53364;&#47000;&#49828;&#44032; &#46121;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&#47336;&#53944;&#12539;&#54588;&#44200;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 2em;"&gt;Draw2D&#50640;&#49436; &#51060;&#50857;&#46104;&#50612;&#51648;&#45716; &#54588;&#44200;&#45716;, &#47784;&#46160; &#47336;&#53944;&#12539;&#54588;&#44200;&#46972;&#44256; &#48520;&#47140;&#51648;&#45716; &#54588;&#44200;&#51032; &#51088;&#49885;&#51060; &#46104;&#50612;&#51665;&#45768;&#45796;.&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 2em;"&gt;&#46608;&#54620;, &#51060; &#54588;&#44200;&#45716;&amp;nbsp;LightweightSystem&#50640;&#49436; &#44288;&#47532;&#46104;&#50612;&#51665;&#45768;&#45796;. SWT&#51032;&amp;nbsp;Canvas&amp;nbsp;&#53080;&#53944;&#47204;&#51032; &#47896;&#54868; &#50689;&#50669;(&#50669;&#51452; : &#49892;&#51228; &#44536;&#47548;&#51060; &#44536;&#47140;&#51648;&#45716; &#47784;&#46304; &#50689;&#50669;&#51012; &#47568;&#54633;&#45768;&#45796;. &#51593; canvas &#53356;&#44592;&#51032; &#54588;&#44200;&#44032; &#44032;&#51109; &#48145;&#50640;&#49436; &#51316;&#51116;&#54616;&#45716; &#44163;&#51060;&#51424;)&amp;nbsp;&#51204;&#52404;&#47484; &#52264;&#51648;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LightweightSystem&lt;/strong&gt;&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 2em;"&gt;&#51060;&#44163;&#51008;, SWT&amp;nbsp;&#53080;&#53944;&#47204;(Canvas)&#44284;&amp;nbsp;Draw2D&#51032; &#54588;&#44200;&#47484; &#50672;&#44208;&#54616;&#45716; &#50836;&#49548;&#51077;&#45768;&#45796;. &#46608;, SWT&#53080;&#53944;&#47204; &#50948;&#50640;&#49436; &#48156;&#49373;&#54620; SWT&amp;nbsp;&#51060;&#48292;&#53944;&#47484;&amp;nbsp;Draw2D&amp;nbsp;&#51060;&#48292;&#53944;&#47196; &#48320;&#54872;&#54616;&#50668;, &#44033; &#54588;&#44200;&#50640; dispatcher &#54616;&#45716; &#50669;&#54624;&#46020; &#44032;&#51648;&#44256; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p style="MARGIN-LEFT: 2em;"&gt;&#46608;&#54620;, &#47336;&#53944;&#12539;&#54588;&#44200;&#51032; &#44288;&#47532;&#46020; &#49892;&#49884;&#54616;&#44256; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&#49892;&#51228;&#47196; Draw2D&#47484; &#49324;&#50857;&#54616;&#51088;&lt;/h2&gt;
&lt;p&gt;&#44536;&#47084;&#47732;, Draw2D&#47484; &#51060;&#50857;&#54616;&#44592; &#50948;&#54644;&#49436; &#54596;&#50836;&#54620; &#44163;&#46308;&#44284; Draw2D&#51032; &#49324;&#50857;&#48277;&#51012; &#44036;&#45800;&#54616;&#44172; &#49444;&#47749;&#54616;&#44192;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;h3&gt;Draw2D&#47484; &#49324;&#50857;&#54616;&#44592; &#50948;&#54644; &#54596;&#50836;&#54620; &#44163;&lt;/h3&gt;
&lt;p&gt;Draw2D&#47484; &#49324;&#50857;&#54620; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#47564;&#46308;&#44592; &#50948;&#54644;&#49436;&#45716;, &#50500;&#47000;&#51032; &#51456;&#48708;&#47932;&#51060; &#54596;&#50836;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;;"&gt;&#54596;&#50836;&#54620;&amp;nbsp;&#51456;&#48708;&#47932;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="FONT-FAMILY: &#44404;&#47548;;"&gt;&#48708;&#44256;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span class="Apple-style-span" style="BORDER-COLLAPSE: separate;"&gt;SWT&#46972;&#51060;&#48652;&#47084;&#47532;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class="Apple-style-span" style="BORDER-COLLAPSE: separate;"&gt;Eclipse&#50640; &#54252;&#54632;(Win32&#50640;&#49436;&#45716;DLL)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;swt.jar&lt;/td&gt;
&lt;td&gt;&lt;span class="Apple-style-span" style="BORDER-COLLAPSE: separate;"&gt;Eclipse&#50640; &#54252;&#54632;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;draw2d.jar&lt;/td&gt;
&lt;td&gt;&lt;span class="Apple-style-span" style="BORDER-COLLAPSE: separate;"&gt;GEF&#54540;&#47084;&#44536;&#51064;&#50640; &#54252;&#54632;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#46608;&#54620;, Draw2D&#47484; &#49324;&#50857;&#54620; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#51089;&#49457;/&#49892;&#54665;&#54616;&#44592; &#50948;&#54644;&#49436;&#45716;, SWT &#46972;&#51060;&#48652;&#47084;&#47532;&#51032; &#44221;&#47196;&#47484; VM&#51064;&#49688;&#47196; &#51648;&#51221;&#54616;&#45716; &#44163;&#51004;&#47196;, swt.jar&#50752; draw2d.jar&#47484; &#48716;&#46300;&#12539;&#54056;&#49828;&#50640; &#52628;&#44032;&#54616;&#45716; &#44163;&#51060; &#54596;&#50836;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Draw2D&#47484; &#49324;&#50857;&#54620; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51032; &#51089;&#49457;&lt;/h3&gt;
&lt;p&gt;&#51060;&#51228;, &#49892;&#51228;&#47196; &#49368;&#54540;&#12539;&#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#51089;&#49457;&#54644;&#48389;&#49884;&#45796;. &#50864;&#49440;&#51008; Eclipse&#50640;&#49436; Java&#54532;&#47196;&#51229;&#53944;&#47484; &#49888;&#44508; &#51089;&#49457;&#54633;&#45768;&#45796;. &#45796;&#51020;&#51008;, &#51089;&#49457;&#54620; &#54532;&#47196;&#51229;&#53944;&#51032; &#48716;&#46300;&#12539;&#54056;&#49828;&#50640;&amp;nbsp;swt.jar&#50752;&amp;nbsp;draw2d.jar&#47484; &#52628;&#44032;&#54633;&#45768;&#45796;. &#45796;&#51020;&#50640;, &#47700;&#51064;&#12539;&#53364;&#47000;&#49828;&#47196;&amp;nbsp;Draw2DMain&#53364;&#47000;&#49828;&#47484; &#49373;&#49457;&#54616;&#50668;, &#50500;&#47000;&#50752; &#44057;&#51060; &#51089;&#49457;&#54633;&#49884;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#47532;&#49828;&#53944;&#65297;:Draw2DMain.java&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;import org.eclipse.draw2d.Button;&lt;/li&gt;
&lt;li&gt;import org.eclipse.draw2d.Figure;&lt;/li&gt;
&lt;li&gt;import org.eclipse.draw2d.IFigure;&lt;/li&gt;
&lt;li&gt;import org.eclipse.draw2d.LightweightSystem;&lt;/li&gt;
&lt;li&gt;import org.eclipse.swt.widgets.Display;&lt;/li&gt;
&lt;li&gt;import org.eclipse.swt.widgets.Shell;&lt;/li&gt;
&lt;li&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;public class Draw2DMain {&lt;/li&gt;
&lt;li&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;public static void main(String[] args) {&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//&amp;nbsp;&lt;span style="FONT-FAMILY: &#44404;&#47548;;"&gt;&#46356;&#54260;&#53944;Display&#47484; &#49324;&#50857;&#54616;&#50668; &#49752;&#51012; &#51089;&#49457;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Shell shell = new Shell();&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;shell.setSize(100,100); // &#49752; &#49324;&#51060;&#51592;&#47484; &#49444;&#51221;&lt;/li&gt;
&lt;li&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//&amp;nbsp;&lt;span style="FONT-FAMILY: &#44404;&#47548;;"&gt;&#51089;&#49457;&#54620; &#49752;&#51012; &#49324;&#50857;&#54616;&#50668; LightweightSystem&#51032; &#51089;&#49457;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;LightweightSystem lws = new LightweightSystem(shell);&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//&amp;nbsp;&lt;span style="FONT-FAMILY: &#44404;&#47548;;"&gt;&#47336;&#53944;&#12539;&#54588;&#44200;&#51032;&#51089;&#49457;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;IFigure panel = new Figure();&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//&amp;nbsp;&lt;span style="FONT-FAMILY: &#44404;&#47548;;"&gt;&#47336;&#53944;&#12539;&#54588;&#44200;&#50640; &#51088;&#49885;&#54588;&#44200;&#51032; &#52628;&#44032;(Hello World&#51032; &#52897;&#49496;&#51012; &#44032;&#51652; &#48260;&#53948;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;panel.add(new Button("Hello World"));&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//&amp;nbsp;&lt;span style="FONT-FAMILY: &#44404;&#47548;;"&gt;&#47336;&#53944;&#12539;&#54588;&#44200;&#51032; &#46321;&#47197;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;lws.setContents(panel);&lt;/li&gt;
&lt;li&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//&amp;nbsp;&lt;span style="FONT-FAMILY: &#44404;&#47548;;"&gt;&#51060;&#54616;&#45716;, &#45796;&#47480; SWT&#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#44284; &#46041;&#51068;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;shell.open();&lt;/li&gt;
&lt;li&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Display display = Display.getDefault();&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while (!shell.isDisposed ()) {&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (!display.readAndDispatch ())&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;display.sleep ();&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
&lt;li&gt;}&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&#49892;&#54665;&lt;/h3&gt;
&lt;p&gt;&#44536;&#47084;&#47732;, &#49892;&#54665;&#54644;&#48389;&#49884;&#45796;. &#44536;&#51204;&#50640;,Java&#44032;&#49345;&#47672;&#49888;&#50640; &#50500;&#47000;&#50752; &#44057;&#51060; &#51064;&#49688;&#47484; &#51648;&#51221;&#54616;&#45716;&#44163;&#51012; &#51082;&#51648; &#47568;&#50500; &#51452;&#49464;&#50836;.(Win32&#44284;SWT&#48260;&#51260;2.1.2&#51012; &#49324;&#50857;&#54664;&#51012; &#44221;&#50864;&#51077;&#45768;&#45796;) &#46608;&#54620;, &amp;nbsp;&#49892;&#54665;&#50640; &#44288;&#54616;&#50668; &#49345;&#49464;&#54620; &#49444;&#47749;&#51008;, &lt;a href="http://www13.plala.or.jp/observe/swt/swt_overview.html" title="http://www13.plala.or.jp/observe/swt/swt_overview.html" class="external"&gt;Standard Widget Toolkit&#51077;&#47928;&lt;/a&gt;&#51012; &#52280;&#44256;&#54644;&#51452;&#49464;&#50836;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;-Djava.library.path=C:\eclipse\plugins\org.eclipse.swt.win32_2.1.2\os\win32\x86&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="TEXT-ALIGN: center;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center;"&gt;&lt;img src="http://www13.plala.or.jp/observe/draw2d/images/draw2d_overview1.jpg" /&gt;&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#50948;&#50752; &#44057;&#51060; &#49892;&#54665;&#46104;&#50612;&#51276;&#49845;&#45768;&#44620;? &#44536;&#47084;&#47732;, &#48260;&#53948;&#51012; &#53364;&#47533;&#54644;&#48372;&#49464;&#50836;. &#53685;&#49345;&#51032; &#48260;&#53948;&#44284; &#44144;&#51032; &#44057;&#51008; &#47784;&#50577;&#51004;&#47196; &#48372;&#50668;&#51648;&#47532;&#46972; &#49373;&#44033;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#54616;&#51648;&#47564;, &#51060; &#48260;&#53948;&#51008; &#50948;&#51247;(&#50669;&#51452; : SWT&#51032; &#48260;&#53948;)&#51060; &#50500;&#45785;&#45768;&#45796;. &#51593;, &#51060; &#48260;&#53948;&#51008;, &#45800;&#51648; LightweightSystem&#44032; &#51089;&#49457;&#54616;&#45716;&amp;nbsp;SWT&#51032;&amp;nbsp;Canvas&#50948;&#51247;&#50640;&amp;nbsp;&#44536;&#47140;&#51652; &#54616;&#45208;&#51032; &#44536;&#47548;&#51077;&#45768;&#45796;. &#54616;&#51648;&#47564;, &#48372;&#53685;&#51032; &#48260;&#53948;&#44284; &#46041;&#51068;&#54616;&#44172; &#53364;&#47533;&#51012; &#54620; &#44221;&#50864;&#50640;&#45716; &#48260;&#53948;&#51060; &#54056;&#51064; &#49345;&#53468;(&#20985;)&#47196; &#44536;&#47140;&#51665;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#51060;&#47084;&#54620; &#44592;&#45733;&#51012; &#49324;&#50857;&#51088;&#44032;&amp;nbsp;&#51228;&#44277;&#54616;&#47140;&#44256; &#54616;&#47732;, &#47588;&#50864; &#44480;&#52270;&#51008; &#51089;&#50629;&#51060; &#46112; &#44163; &#51077;&#45768;&#45796;. &#50780;&#45264;&#54616;&#47732;, &#54616;&#45208;&#51032; &#50952;&#46020;&#50864; &#45236;&#48512;&#50640;&#49436; &#51060; &#48260;&#53948;&#51032; &#50948;&#50640;&#49436; &#47560;&#50864;&#49828;&#12539;&#51060;&#48292;&#53944;(ex:&#53364;&#47533;&#54620; &#44221;&#50864;)&#44032; &#48156;&#49373;&#54620; &#44221;&#50864;&#50640;&#47564;, &#48260;&#53948;&#51032; &#47896;&#54868;&#47484; &#45812;&#45817;&#54616;&#44256; &#51080;&#45716; &#53364;&#47000;&#49828;&#50640;, &#51060;&#48292;&#53944;&#47484; &#48372;&#45244; &#54596;&#50836;&#44032; &#51080;&#44256;, &#53685;&#49345;&#51032;Draw2D&#47484; &#49324;&#50857;&#54620; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#50640;&#49436;&#45716;, &#44536; &#45800;&#51068; &#50952;&#46020;&#50864;&#50640; &#48373;&#49688;&#51032; &#54588;&#44200;&#44032; &#50668;&#44592;&#51200;&#44592; &#48176;&#52824;&#46104;&#50612; &#51080;&#44592; &#46412;&#47928;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;(&#50669;&#51452; : &#48373;&#49688;&#51032; &#54588;&#44200;&#50640;&#49436; &#48156;&#49373;&#54616;&#45716; &#51060;&#48292;&#53944;&#47484; &#44396;&#48516;&#54616;&#50668; &#54616;&#45208;&#51032; &#54588;&#44200;&#50640; &#53945;&#51221; &#54665;&#46041;&#51012; &#44396;&#54788;&#54616;&#44592; &#50948;&#54644;&#49436;&#45716; &#47566;&#51008; &#51089;&#50629;&#51060; &#54596;&#50836;&#54616;&#44592;&#46412;&#47928;&#51077;&#45768;&#45796;.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#44536;&#47084;&#45208;, &#51060;&#47088; &#51068;&#47144;&#51032; &#48373;&#51105;&#54620;&amp;nbsp;&#52376;&#47532;&#45716;&amp;nbsp;Draw2D&#44032; &#47784;&#46160; &#52376;&#47532;&#54616;&#50668; &#51469;&#45768;&#45796;. &#51060; &#46412;&#47928;&#50640;, &#50976;&#51200;&#45716; &#44536;&#44163;&#51060; &#48373;&#49688;&#51032; &#50952;&#46020;&#50864;&#47196; &#44396;&#49457;&#46104;&#45716; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51064; &#44163;&#44284; &#44057;&#51060;, &#44033; &#54588;&#44200;&#47560;&#45796; &#47560;&#50864;&#49828;&#12539;&#51060;&#48292;&#53944;&#47484; &#52376;&#47532;&#54624; &#49688; &#51080;&#49845;&#45768;&#45796;. &#44172;&#45796;&#44032; Draw2D&#45716;, &#51060;&#47084;&#54620; &#54588;&#44200;&#50640; &#45824;&#54644;&#49436;, &#53685;&#49345;&#51032; &#50952;&#46020;&#50864;&#50752; &#46041;&#51068;&#54620; &#54252;&#52964;&#49828; &#44288;&#47532;&#51032; &#44592;&#45733;&#46020; &#51228;&#44277;&#54644; &#51452;&#44256; &#51080;&#49845;&#45768;&#45796;. &#51593;, &#50612;&#46496;&#54620; &#53412;&#12539;&#51060;&#48292;&#53944;&#44032; &#48156;&#49373;&#54664;&#51012; &#44221;&#50864;, &#54252;&#52964;&#49828;&#44032; &#51080;&#45716; &#54588;&#44200;&#50640;&#44172;&#47564;, &#44536;&#44163;&#51012; &#44048;&#51648;&#54616;&#45716; &#52376;&#47532;&#47484; &#49892;&#54665;&#54616;&#45716; &#44163;&#51077;&#45768;&#45796;. &#45908;&#50865;&#51060; Draw2D&#45716;, &#49324;&#44033;&#51060;&#45208; &#53440;&#50896;&#51012; &#47896;&#54868; &#54616;&#45716; &#54588;&#44200;, &#46608;&#45716; &#47928;&#51088;&#50676;&#51060;&#45208; &#51060;&#48120;&#51648;&#47484; &#54364;&#49884;&#54616;&#45716; &#46972;&#48296;, &#54841;&#51008; &#52404;&#53356; &#48149;&#49828;&#45208; &#49828;&#53356;&#47204; &#48148;&#46972;&#44256; &#54616;&#45716; &#50976;&#49324;&#52968;&#53944;&#47204; &#46321;&#46321;&#51032;, &#50668;&#47084;&#44032;&#51648; &#54588;&#44200;&#46020; &#51228;&#44277;&#54616;&#44256; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&#45149;&#47610;&#51020;&lt;/h2&gt;
&lt;p&gt;&#51060;&#49345;, Draw2D&#51077;&#47928;&#51012; &#47560;&#52841;&#45768;&#45796;. &#51060;&#48264; &#44053;&#51340;&#50640;&#49436;&#45716;,Draw2D&#51012; &#49324;&#50857;&#54616;&#50668; &#49892;&#51228; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#51089;&#49457;&#54616;&#44256;,&amp;nbsp;Draw2D&#51032; &#44592;&#48376;&#51201;&#51064;&amp;nbsp;&#44396;&#51312;&#50640; &#44288;&#54644;&#49436;&#46020; &#49548;&#44060;&#47484;&amp;nbsp;&#54616;&#50688;&#49845;&#45768;&#45796;. &#45796;&#47480;&amp;nbsp;Draw2D&amp;nbsp;&#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#50640; &#44288;&#54644;&#49436;&#46020;, &#51089;&#49457;&#48169;&#48277;&#51060; &#50724;&#45720; &#48176;&#50868; &#44163;&#44284; &#53356;&#44172; &#45796;&#47476;&#51648; &#50506;&#49845;&#45768;&#45796;. &#44536;&#47111;&#44592;&amp;nbsp;&#46412;&#47928;&#50640;, &#51060;&#48264;&#50640; &#51089;&#49457;&#54620; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#44592;&#52488;&#47196;, &#47566;&#51008; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#51089;&#49457;&#54616;&#50668; &#48372;&#45716;&#44163;&#46020; &#51339;&#51012;&#51648;&#46020; &#47784;&#47476;&#44192;&#49845;&#45768;&#45796;. &#50696;&#47484; &#46308;&#50612;, &#51060;&#48264;&#50640;&#45716;Draw2D&#51032; &#48260;&#53948;&#51012; &#49324;&#50857;&#54616;&#50688;&#49845;&#45768;&#45796;&#47564;, &#45796;&#47480; &#54588;&#44200;&#47484; &#49324;&#50857;&#54620;&amp;nbsp;&#44221;&#50864;&#45716; &#50612;&#46523;&#44172; &#46112;&#51648; &#49884;&#54744;&#54644;&#48372;&#49464;&#50836;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#52376;&#51020;&#50640; &#51201;&#50632;&#46319;&#51060;, Draw2D&#45716;&amp;nbsp;GEF&#51012; &#44396;&#49457;&#54616;&#45716; &#54616;&#45208;&#51032; &#48512;&#54408;&#51077;&#45768;&#45796;. &#54616;&#51648;&#47564;, Draw2D&amp;nbsp;&#45800;&#46021;&#51004;&#47196;&#46020; &#44256;&#46020;&#51032; &#44592;&#45733;&#51012; &#51228;&#44277;&#54616;&#44256; &#51080;&#49845;&#45768;&#45796;. &#46608;&#54620;, &#51060;&#48264;&#50640;&#45716; &#53412;/&#47560;&#50864;&#49828;&#12539;&#51060;&#48292;&#53944;&#51032; &#52376;&#47532;, &#54588;&#44200;&#47484; &#51088;&#50976;&#47213;&#44172; &#48176;&#52824;&#54616;&#44592;&amp;nbsp;&#50948;&#54620; &#47112;&#51060;&#50500;&#50883;&amp;nbsp;&#46321;&#51032; &#44592;&#45733;&#51008; &#45796;&#47336;&#51648; &#50506;&#50520;&#51648;&#47564; &#51060;&#44163;&#46308;&#50640; &#45824;&#54644;&#49436;&#45716; &#52380;&#52380;&#55176; &#45796;&#47480;&#44592;&#54924;&#44032; &#51080;&#51004;&#47732; &#52292;&#53469;&#54616;&#44256; &#49910;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&#52280;&#44256;&#47928;&#54732;&lt;/h2&gt;
&lt;p&gt;Eclipse &#49324;&#51060;&#53944;(&lt;a href="http://www.eclipse.org/" title="http://www.eclipse.org/" class="external"&gt;http://www.eclipse.org/&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;GEF&#47928;&#49436;&#50752; Draw2D&#51032;Javadoc&lt;/p&gt;
&lt;p&gt;Eclipse&#49324;&#51060;&#53944;&#45236;&#51032; &#44544;&#65306;&lt;a href="http://www.eclipse.org/articles/Article-GEF-Draw2d/GEF-Draw2d.html" title="http://www.eclipse.org/articles/Article-GEF-Draw2d/GEF-Draw2d.html" class="external"&gt;Display a UML Diagram using Draw2D&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Wed, 24 Jun 2009 13:14:54 +0900</pubDate>
      <link>http://eclipse-articles.springnote.com/pages/3666185</link>
      <guid>http://eclipse-articles.springnote.com/pages/3666185</guid>
    </item>
    <item>
      <title>Draw2D &#51077;&#47928;</title>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Wed, 24 Jun 2009 13:02:12 +0900</pubDate>
      <link>http://eclipse-articles.springnote.com/pages/3683239</link>
      <guid>http://eclipse-articles.springnote.com/pages/3683239</guid>
    </item>
    <item>
      <title>Eclipse Articles</title>
      <description>&lt;h4 class="xqtHeading"&gt;&lt;img class="icon" src="/images/template/ic_books.gif" /&gt;&amp;nbsp;&#48264;&#50669;&#54620; &#47928;&#49436;&lt;/h4&gt;
&lt;ul class="bookListType"&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="/pages/2260622" title="Adding Drag and Drop to an SWT Application" class="wiki"&gt;Adding Drag and Drop to an SWT Application&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="/pages/2453752" title="Contributing Actions to the Eclipse Workbench " class="wiki"&gt;Contributing Actions to the Eclipse Workbench&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/pages/2260610" title="Java Application Profiling using TPTP" class="wiki"&gt;Java Application Profiling using TPTP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/pages/#" class="wiki"&gt;Swing/SWT Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 class="xqtHeading"&gt;&lt;img class="icon" src="/images/template/ic_books.gif" /&gt;&amp;nbsp;&#48264;&#50669; &#51473;&#51064; &#47928;&#49436;&lt;/h4&gt;
&lt;ul class="bookListType"&gt;
&lt;li&gt;&lt;a href="/pages/2453878" title="On the Job: The Eclipse Jobs API" class="wiki"&gt;On the Job: The Eclipse Jobs API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/pages/2588474" class="wiki" title="Automating Eclipse PDE Unit Tests using Ant"&gt;Automating Eclipse PDE Unit Tests using Ant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/pages/2790414" title="Rich Client Tutorial Part 3" class="wiki"&gt;Rich Client Tutorial Part 3&lt;/a&gt;&amp;nbsp; (2/26 - &#48264;&#50669;&#51473;...)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="/pages/2881530" class="wiki" title="Building Eclipse Plugins with Maven 2"&gt;Building Eclipse Plugins with Maven 2&lt;/a&gt; (3/12 - &#48264;&#50669;&#51473;... &#44256;&#54252;&#47551;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 class="xqtHeading"&gt;&lt;img class="icon" src="/images/template/ic_books.gif" /&gt;&amp;nbsp;&#48264;&#50669; &#50696;&#51221; &#47928;&#49436;&lt;/h4&gt;
&lt;ul class="bookListType"&gt;
&lt;li&gt;&lt;a href="/pages/2453756" title="Eclipse Forms: New in 3.3" class="wiki"&gt;Eclipse Forms: New in 3.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Mon, 22 Jun 2009 17:19:05 +0900</pubDate>
      <link>http://eclipse-articles.springnote.com/pages/2260606</link>
      <guid>http://eclipse-articles.springnote.com/pages/2260606</guid>
    </item>
    <item>
      <title>Resource Change Notification Batching</title>
      <description>&lt;h3&gt;&lt;span class="Apple-style-span" style="font-family: &#45796;&#51020;_Regular; font-size: 16px; line-height: normal;"&gt;Resource Change Notification Batching&lt;/span&gt;&lt;/h3&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The old&amp;nbsp;&lt;code&gt;IWorkspace#run(IWorkspaceRunnable)&lt;/code&gt;&amp;nbsp;method was used to batch deltas and prevent auto-builds from running until the outermost&amp;nbsp;&lt;code&gt;run&lt;/code&gt;&amp;nbsp;method completed. With the introduction of the Jobs API, this is still the case, to a certain degree, but with the following changes:&lt;/p&gt;
&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 2em; line-height: 2em;"&gt;
&lt;li style="line-height: 2em;"&gt;A new API has been introduced to integrate with jobs and scheduling rules.&lt;/li&gt;
&lt;li style="line-height: 2em;"&gt;&lt;code&gt;POST_CHANGE&lt;/code&gt;&amp;nbsp;deltas may be fired at intervals while within an&amp;nbsp;&lt;code&gt;IWorkspaceRunnable&lt;/code&gt;&amp;nbsp;in order to ensure responsiveness of the UI. Previously, deltas were only fired when the runnable completed execution.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The following table provides the API class or method to use depending on whether the user requires delta batching or concurrency.&lt;/p&gt;
&lt;table style="width: 96%; margin-top: 2em; margin-right: 0px; margin-bottom: 2em; margin-left: 0px; border-collapse: collapse; font-size: 1em; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(0, 0, 0); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(0, 0, 0);"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 3px; padding-bottom: 0px; padding-left: 3px; line-height: 2em; background-image: ; background-color: initial; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(0, 0, 0); background-position: 0px 100%;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 3px; padding-bottom: 0px; padding-left: 3px; line-height: 2em; background-image: ; background-color: initial; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(0, 0, 0); background-position: 0px 100%;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Delta batching&lt;/span&gt;&lt;/td&gt;
&lt;td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 3px; padding-bottom: 0px; padding-left: 3px; line-height: 2em; background-image: ; background-color: initial; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(0, 0, 0); background-position: 0px 100%;"&gt;No batching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 3px; padding-bottom: 0px; padding-left: 3px; line-height: 2em; background-image: ; background-color: initial; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(0, 0, 0); background-position: 0px 100%;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Separate Thread (background)&lt;/span&gt;&lt;/td&gt;
&lt;td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 3px; padding-bottom: 0px; padding-left: 3px; line-height: 2em; background-image: ; background-color: initial; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(0, 0, 0); background-position: 0px 100%;"&gt;WorkspaceJob&lt;/td&gt;
&lt;td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 3px; padding-bottom: 0px; padding-left: 3px; line-height: 2em; background-image: ; background-color: initial; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(0, 0, 0); background-position: 0px 100%;"&gt;Job&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 3px; padding-bottom: 0px; padding-left: 3px; line-height: 2em; background-image: ; background-color: initial; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(0, 0, 0); background-position: 0px 100%;"&gt;Same thread&lt;/td&gt;
&lt;td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 3px; padding-bottom: 0px; padding-left: 3px; line-height: 2em; background-image: ; background-color: initial; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(0, 0, 0); background-position: 0px 100%;"&gt;IWorkspace.run()&lt;/td&gt;
&lt;td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 3px; padding-bottom: 0px; padding-left: 3px; line-height: 2em; background-image: ; background-color: initial; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(0, 0, 0); background-position: 0px 100%;"&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;If delta batching is desired and the work is to be done in the same thread, then&amp;nbsp;&lt;code&gt;IWorkspace.run()&lt;/code&gt;&amp;nbsp;is used as before. However, now there are two&amp;nbsp;&lt;code&gt;run()&lt;/code&gt;&amp;nbsp;methods on&amp;nbsp;&lt;code&gt;IWorkspace&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" style="" width="24" /&gt;     public void run(
              IWorkspaceRunnable, IProgressMonitor);
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_2.gif" height="13" style="" width="24" /&gt;     public void run(
              IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor);
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Notice that the second method (&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_2.gif" height="13" style="" width="24" /&gt; which is new in 3.0) takes an additional &lt;code&gt;ISchedulingRule&lt;/code&gt; parameter. It is better to use this new API and identify a scheduling rule that encompasses only those resources that will be modified inside the &lt;code&gt;IWorkspaceRunnable&lt;/code&gt;. If it is not known ahead of time which resources will be modified, &lt;code&gt;null&lt;/code&gt; can be passed as an argument and the scheduling rules can then be obtained inside the &lt;code&gt;IWorkspaceRunnable&lt;/code&gt;. If an appropriate encompassing rule cannot be defined ahead of time, using &lt;code&gt;null&lt;/code&gt; as the rule of a runnable is often preferable to using the old &lt;code&gt;run&lt;/code&gt; method (&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" style="" width="24" /&gt;) because this method locks the entire workspace while the&lt;code&gt;IWorkspaceRunnable&lt;/code&gt; is run. The use of the old &lt;code&gt;run&lt;/code&gt; method can easily cause the UI to become unresponsive because the invoking thread will block while any other thread holds an &lt;code&gt;IResource&lt;/code&gt; scheduling rule. The user will be presented with a progress dialog but will still need to wait for the operation to complete before doing anything else.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tip.gif" height="13" style="" width="62" /&gt; In most cases, the firing of post-change deltas from within a workspace operation is not a problem. However, it will affect those who depended on these happening only at the end of an operation. For these cases, the new run method also takes an &lt;code&gt;int&lt;/code&gt;flag which, when set to &lt;code&gt;IWorkspace.AVOID_UPDATE;&lt;/code&gt; this will prevent deltas from occurring while inside the operation.&lt;/p&gt;
&lt;h4 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(34, 61, 103); font-size: 1.333em; line-height: 3em; background-image: ; background-color: initial; font-family: 'malgun gothic', dotum, gulim, sans-serif; background-position: 0px 100%;"&gt;&#50696;&#51228; 1: &#44592;&#51316; IWorkspace&#51032; run &#47700;&#50136;&#46300; &#49324;&#50857;&#54616;&#44592;&lt;/h4&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The following example modifies the contents of the selected files.&lt;/p&gt;
&lt;pre&gt;
final IFile[] files = getSelectedFiles();
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" style="" width="24" /&gt;  ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() {&lt;br /&gt;
        public void run(IProgressMonitor monitor) throws CoreException {&lt;br /&gt;
           for (int i = 0; i &amp;lt; files.length; i++) {&lt;br /&gt;
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_3.gif" height="13" style="" width="24" /&gt;           files[i].setContents(modifyContents(files[i].getContents()), 
                                       false, true, monitor);&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_2.gif" height="13" style="" width="24" /&gt;  }, null);
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;In earlier versions of Eclipse, this code, although not perfect, was acceptable; there are now problems with this code, however.&lt;/p&gt;
&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 2em; line-height: 2em;"&gt;
&lt;li style="line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" style="" width="24" /&gt;It uses the old workspace &lt;code&gt;run&lt;/code&gt; method obtains a lock on the workspace root resource. This will block our task in the above code until any other tasks that are modifying workspace resources complete and will then block any future tasks that try to modify resources until our task completes.&lt;/li&gt;
&lt;li style="line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_2.gif" height="13" style="" width="24" /&gt;It passes a &lt;code&gt;null&lt;/code&gt; progress monitor, which does not allow a user to cancel the operation should it be waiting too long. The Workbench will still present a dialog to the user if our task is blocked, but it will not show progress.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(34, 61, 103); font-size: 1.333em; line-height: 3em; background-image: ; background-color: initial; font-family: 'malgun gothic', dotum, gulim, sans-serif; background-position: 0px 100%;"&gt;&#50696;&#51228; 2: &#49352;&#47196;&#50868; IWorkspace&#51032; run &#47700;&#50136;&#46300; &#49324;&#50857;&#54616;&#44592;&lt;/h4&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Now we are going to convert the above example to use the new &lt;code&gt;run&lt;/code&gt; method. First, let's look at how we can provide a more specific scheduling rule. The easiest approach would be to pass &lt;code&gt;null&lt;/code&gt;. This will work because each file modification (&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_3.gif" height="13" style="" width="24" /&gt; in the above example) obtains the proper scheduling rule on the individual resource. However, we may want to ensure that another thread does not modify any of the files we ae operating on until we are done. The following method combines the rules required to modify each file into a single scheduling rule that will ensure that no one else can modify our files until we release the rule.&lt;/p&gt;
&lt;pre&gt;
public ISchedulingRule modifyRule(IFile[] files) {&lt;br /&gt;
        ISchedulingRule combinedRule = null;&lt;br /&gt;
        IResourceRuleFactory ruleFactory = 
               ResourcesPlugin.getWorkspace().getRuleFactory();&lt;br /&gt;
        for (int i = 0; i &amp;lt; files.length; i++) {&lt;br /&gt;
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_4.gif" height="13" style="" width="24" /&gt;        ISchedulingRule rule = ruleFactory.modifyRule(files[i]);&lt;br /&gt;
           combinedRule = MultiRule.combine(rule, combinedRule);&lt;br /&gt;
        }&lt;br /&gt;
        return combinedRule;&lt;br /&gt;
     }
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;This code is the same as the &lt;code&gt;createRule&lt;/code&gt; in the previous section except that it uses the &lt;code&gt;modifyRule&lt;/code&gt; of the rule factory instead (line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_4.gif" height="13" style="" width="24" /&gt;). The code from our previous example then becomes the following code, the only difference being line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_5.gif" height="13" style="" width="24" /&gt; where a scheduling rule is provided to the &lt;code&gt;run&lt;/code&gt; method.&lt;/p&gt;
&lt;pre&gt;
final IFile[] files = getSelectedFiles();
     ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() {&lt;br /&gt;
        public void run(IProgressMonitor monitor) throws CoreException {&lt;br /&gt;
           for (int i = 0; i &amp;lt; files.length; i++) {&lt;br /&gt;
              files[i].setContents(modifyContents(files[i].getContents()), 
                                        false, true, monitor);&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_5.gif" height="13" style="" width="24" /&gt;  }, modifyRule(files), IResource.NONE, monitor);
&lt;/pre&gt;
&lt;h4 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(34, 61, 103); font-size: 1.333em; line-height: 3em; background-image: ; background-color: initial; font-family: 'malgun gothic', dotum, gulim, sans-serif; background-position: 0px 100%;"&gt;&#50696;&#51228; 3: &#51652;&#54665; &#49345;&#54889; &#51228;&#44277; &#48143; &#52712;&#49548; &#44592;&#45733; &#51228;&#44277;&lt;/h4&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;In the previous example, we illustrated how to use the new &lt;code&gt;IWorkspace.run&lt;/code&gt; method to obtain a scheduling rule on the resources being modified. Any time a scheduling rule is acquired, execution of that thread might be blocked until the rule can be obtained. In situations like these, the user would benefit from seeing a dialog that shows the progress for the running task and provides feedback if the task is blocked by some other task. The easiest way to do this is to use the progress service provided by the&lt;em style="line-height: 2em;"&gt;org.eclipse.ui.workbench&lt;/em&gt; plug-in:&lt;/p&gt;
&lt;pre&gt;
// Create a runnable that can be passed to the progress service&lt;br /&gt;
     final IFile[] files = getSelectedFiles();&lt;br /&gt;
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_6.gif" height="13" style="" width="24" /&gt;  WorkspaceModifyOperation op = new WorkspaceModifyOperation(modifyRule(files)) {&lt;br /&gt;
        protected void execute(IProgressMonitor monitor) throws CoreException {&lt;br /&gt;
           for (int i = 0; i &amp;lt; files.length; i++) {&lt;br /&gt;
              files[i].setContents(modifyContents(files[i].getContents()), 
                                          false, true, monitor);&lt;br /&gt;
           }&lt;br /&gt;
        };&lt;br /&gt;
     };
&lt;br /&gt;
     // Use the progess service to execute the runnable&lt;br /&gt;
     IProgressService service = PlatformUI.getWorkbench().getProgressService();&lt;br /&gt;
     try {&lt;br /&gt;
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_7.gif" height="13" style="" width="24" /&gt;     service.run(true, true, op);&lt;br /&gt;
     } catch (InvocationTargetException e) {&lt;br /&gt;
        // Operation was canceled&lt;br /&gt;
     } catch (InterruptedException e) {&lt;br /&gt;
        // Handle the wrapped exception&lt;br /&gt;
     }
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The above code creates a &lt;code&gt;WorkspaceModifyOperation&lt;/code&gt; (line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_6.gif" height="13" style="" width="24" /&gt;) instead of an &lt;code&gt;IWorkspaceRunnable&lt;/code&gt;, The &lt;code&gt;WorkspaceModifyOperation&lt;/code&gt; is a helper class provided by the org.eclipse.ui.workbench.ide plug-in that can be used to convert code that appears in an&lt;code&gt;IWorkspaceRunnable&lt;/code&gt; (as in our previous two examples) into a form that can be used by the progress service (i.e., an instance of&lt;code&gt;IRunnableWithProgress&lt;/code&gt;). Take note that, in this new example, we provided an &lt;code&gt;execute&lt;/code&gt; method instead of a &lt;code&gt;run&lt;/code&gt; method, and that the&lt;code&gt;WorkspaceModifyOperation&lt;/code&gt; takes a scheduling rule as an argument in its constructor. Once we have our operation, we run it using the progress service (line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_7.gif" height="13" style="" width="24" /&gt;), indicating that the execution of the runnable should be forked and that cancelation should be allowed (indicated by the two &lt;code&gt;boolean&lt;/code&gt; parameters to the progress service &lt;code&gt;run&lt;/code&gt; method).&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The advantage of using the progress service is that it will show a progress dialog that will give the user feedback about jobs that may be blocking this one and allow the user to cancel if the operation is taking too long. There are, however, factors we must be aware of with this code.&lt;/p&gt;
&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 2em; line-height: 2em;"&gt;
&lt;li style="line-height: 2em;"&gt;The code inside the operation is run in a separate thread in order to allow the UI to be responsive. This means that any access to UI components must be done within a &lt;code&gt;syncExec()&lt;/code&gt; or &lt;code&gt;asyncExec()&lt;/code&gt; or an invalid thread access exception will be thrown by SWT. In our example, there is no code that modifies the UI so we are OK. There is also a &lt;code&gt;runInUI&lt;/code&gt; method on &lt;code&gt;IProgressService,&lt;/code&gt; which should be considered when writing code that updates the UI. Also, another option to consider is the use of &lt;code&gt;WorkbenchJob&lt;/code&gt; which is a job that runs in the UI thread.&lt;/li&gt;
&lt;li style="line-height: 2em;"&gt;The user still cannot do anything while the code is running because the progress service will first show a busy cursor and then, if the operation is not yet completed after a short amount of time, will open a progress dialog.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;This second point is addressed by the next example.&lt;/p&gt;
&lt;h4 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(34, 61, 103); font-size: 1.333em; line-height: 3em; background-image: ; background-color: initial; font-family: 'malgun gothic', dotum, gulim, sans-serif; background-position: 0px 100%;"&gt;&#50696;&#51228; 4: WorkspaceJob &#49324;&#50857;&#54616;&#44592;&lt;/h4&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Another way to batch resource change notifications is to use a &lt;code&gt;WorkspaceJob&lt;/code&gt;. The code to do what we did in the previous example using a &lt;code&gt;WorkspaceJob&lt;/code&gt; would look like this.&lt;/p&gt;
&lt;pre&gt;
final IFile[] files = getSelectedFiles();
     WorkspaceJob job = new WorkspaceJob("Modify some files") {
        public IStatus runInWorkspace(IProgressMonitor monitor) 
              throws CoreException {
           for (int i = 0; i &amp;lt; files.length; i++) {&lt;br /&gt;
              files[i].setContents(modifyContents(files[i].getContents()), 
                                        false, true, monitor);&lt;br /&gt;
           }
           return Status.OK_STATUS;
        }
     };
     job.setRule(modifyRule(files));
     job.schedule();
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The behavior of this job is similar to that of the &lt;code&gt;IWorkspace.run&lt;/code&gt; methods in the sense that resource change notifications will be batched. The advantage of using a job is that it can be run in the background, thus allowing the user to perform other tasks. The disadvantage is that providing feedback to the user is more complicated than just throwing up a progress dialog. The next section will address the issue of providing feedback to the user about background tasks.&lt;/p&gt;
&lt;div class="section" style="background-color: #F9F9D8;"&gt;&lt;br /&gt;&lt;/div&gt;
</description>
      <pubDate>Wed, 08 Apr 2009 16:47:03 +0900</pubDate>
      <link>http://eclipse-articles.springnote.com/pages/2453892</link>
      <guid>http://eclipse-articles.springnote.com/pages/2453892</guid>
    </item>
    <item>
      <title>Providing Feedback about Jobs</title>
      <description>&lt;h3&gt;&lt;span class="Apple-style-span" style="font-family: &#45796;&#51020;_Regular; font-size: 16px; line-height: normal;"&gt;Jobs&#50640; &#45824;&#54620; &#54588;&#46300;&#48177; &#51228;&#44277;&#54616;&#44592;&lt;/span&gt;&lt;/h3&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Although it is a good thing that jobs can be run in the background, it can be confusing when jobs that are launched as a direct result of user action just run in the background. When this happens, the user is not sure whether something is happening or if the action failed. One way of dealing with this is by showing progress in the Workbench progress area in the lower right corner of the Workbench window. Progress is shown in the progress area for any job that is a non-system job. By default, jobs are non-system jobs so this feedback will happen unless the job is explicitly marked as a system job (using&amp;nbsp;&lt;code&gt;setSystem&lt;/code&gt;).&lt;/p&gt;
&lt;blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 38px; line-height: 2em; background-image: ; background-color: rgb(239, 239, 239); background-position: 14px 4px;"&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/progressstatusarea.gif" height="38" style="" width="262" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(34, 61, 103); font-size: 1.333em; line-height: 3em; background-image: ; background-color: initial; font-family: 'malgun gothic', dotum, gulim, sans-serif; background-position: 0px 100%;"&gt;Example 1: &#49324;&#50857;&#51088; Jobs (User Jobs)&lt;/h4&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Showing progress in the progress area can still be too subtle for most users. In many cases, the user would like stronger feedback about the job's start and completion. The former indication can be provided by tagging the job as a user job.&lt;/p&gt;
&lt;pre&gt;
Job job = new Job("Use initiated job") {&lt;br /&gt;
        protected IStatus run(IProgressMonitor monitor) {&lt;br /&gt;
           // So some work&lt;br /&gt;
           return Status.OK_STATUS;&lt;br /&gt;
        }&lt;br /&gt;
     };
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" style="" width="24" /&gt;  job.setUser(true);
     job.schedule();
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;In line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" style="" width="24" /&gt;, the job has been identified as a user job. What this means is that the user will be shown a progress dialog but will be given the option to run the job in the background by clicking a button in the dialog. This was done to keep the user experience close to what it was pre-3.0 but still allow the user to benefit from background tasks. There is a Workbench option, "Always run in background", that can be enabled if a user does not want to see the progress dialog.&lt;/p&gt;
&lt;blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 38px; line-height: 2em; background-image: ; background-color: rgb(239, 239, 239); background-position: 14px 4px;"&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/usermodalprogress.gif" height="198" style="" width="450" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(34, 61, 103); font-size: 1.333em; line-height: 3em; background-image: ; background-color: initial; font-family: 'malgun gothic', dotum, gulim, sans-serif; background-position: 0px 100%;"&gt;&#50696;&#51228; 2: &#50756;&#47308;&#46108; Jobs&#51012; &#50948;&#54620; &#49324;&#50857;&#51088; &#54588;&#46300;&#48177;&lt;/h4&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;If the user does not choose to run the job in the background, then they will know when the job has completed because the progress dialog will close. However, if they choose to run the job in the background (by using the dialog button or the preference), they will not know when the job has completed. Furthermore, a running job may accumulate information that should be displayed to the user when the job completes. This can be shown to the user immediately if the job is modal (i.e., the job was not run in the background). However, if the job was run in the background, the information should not be displayed immediately because it may interrupt what the user is currently doing. In these cases, an indication is placed on the far-right side of the Workbench progress area, which indicates that the job is done and has results for the user to view. Clicking on the indicator will display the result. Such a job will also leave an entry in the progress view, which can be opened by double-clicking in the progress area. Clicking on the link in the progress view will also open the result.&lt;/p&gt;
&lt;blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 38px; line-height: 2em; background-image: ; background-color: rgb(239, 239, 239); background-position: 14px 4px;"&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/progressview.gif" height="167" style="" width="522" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Now let's have a look at how we can configure a job to give us this behavior.&lt;/p&gt;
&lt;pre&gt;
Job job = new Job("Online Reservation") {
        protected IStatus run(IProgressMonitor monitor) {
           // Make a reservation
           // ...
           setProperty(IProgressConstants.ICON_PROPERTY, getImage());
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" style="" width="24" /&gt;        if (isModal(this)) {
              // The progress dialog is still open so
              // just open the message
              showResults();
           } else {
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_2.gif" height="13" style="" width="24" /&gt;           setProperty(IProgressConstants.KEEP_PROPERTY, Boolean.TRUE);
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_3.gif" height="13" style="" width="24" /&gt;           setProperty(IProgressConstants.ACTION_PROPERTY, 
                  getReservationCompletedAction());
           }
           return Status.OK_STATUS;
        }
     };
     job.setUser(true);
     job.schedule();
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Let's assume that the purpose of the above job is to make a reservation for the user in the background. The user may decide to wait while the reservation is being made or decide to run it in the background. When the job completes the reservation, it checks to see what the user chose to do (line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" style="" width="24" /&gt;). The &lt;code&gt;isModal(Job)&lt;/code&gt; method is implemented as follows:&lt;/p&gt;
&lt;pre&gt;
public boolean isModal(Job job) {
        Boolean isModal = (Boolean)job.getProperty(
                               IProgressConstants.PROPERTY_IN_DIALOG);
        if(isModal == null) return false;
        return isModal.booleanValue();
     }
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;This method checks the &lt;code&gt;IProgressConstants.PROPERTY_IN_DIALOG&lt;/code&gt; to see if the job is being run in a dialog. Basically, if the property exists and is the &lt;code&gt;Boolean&lt;/code&gt; value &lt;code&gt;true&lt;/code&gt;, then the user decided to wait for the results. The results can be shown immediately to the user (by invoking &lt;code&gt;showResults&lt;/code&gt;).&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;However, if the user chose to run the job in the background, we want to configure the job so that the user is given the indication that the job has completed. This is done in line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_2.gif" height="13" style="" width="24" /&gt; by setting the &lt;code&gt;KEEP&lt;/code&gt; property of the job. This causes the job to remain in the progress view so the results can be accessible to the user. In line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_3.gif" height="13" style="" width="24" /&gt;, we associate an action with the job. This will cause a link to be added to the progress view and the progress status area. When the user clicks on the link, they will see the results. The action for the job could look something like this.&lt;/p&gt;
&lt;pre&gt;
protected Action getReservationCompletedAction() {
                return new Action("View reservation status") {
                        public void run() {
                                MessageDialog.openInformation(getShell(), 
                  "Reservation Complete", 
                  "Your reservation has been completed");
                        }
                };
        }
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;When the user clicks on the results link, the action is run, resulting in the following dialog.&lt;/p&gt;
&lt;blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 38px; line-height: 2em; background-image: ; background-color: rgb(239, 239, 239); background-position: 14px 4px;"&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/result.gif" height="218" style="" width="538" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;It is worthwhile to look at the &lt;code&gt;showResults&lt;/code&gt; method that we invoked in the modal case.&lt;/p&gt;
&lt;pre&gt;
protected static void showResults() {
        Display.getDefault().asyncExec(new Runnable() {
           public void run() {
              getReservationCompletedAction().run();
           }
        });
     }
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;In this case, we run the same action but we do it using an &lt;code&gt;asyncExec&lt;/code&gt; since the job will not be running in the UI thread.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tip.gif" height="13" style="" width="62" /&gt;There are a few other useful &lt;code&gt;IProgressConstants&lt;/code&gt; job properties. Our example also showed the use of the &lt;code&gt;IMAGE&lt;/code&gt; constant which is used to customize the image that appears in the progress view. There is also a &lt;code&gt;KEEPONE&lt;/code&gt; property that is like the &lt;code&gt;KEEP&lt;/code&gt;property but will ensure that only one job from a given family is kept in the progress view.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tip.gif" height="13" style="" width="62" /&gt;It is possible that multiple jobs are part of the same logical task. In these cases, the jobs can be grouped in a single entry in the progress view using a progress group. Grouping is accomplished using the &lt;code&gt;setProgressGroup&lt;/code&gt; method of &lt;code&gt;Job&lt;/code&gt;.&lt;/p&gt;
&lt;div class="section" style="background-color: #F9F9D8;"&gt;&lt;br /&gt;&lt;/div&gt;
</description>
      <pubDate>Wed, 08 Apr 2009 16:43:41 +0900</pubDate>
      <link>http://eclipse-articles.springnote.com/pages/2453890</link>
      <guid>http://eclipse-articles.springnote.com/pages/2453890</guid>
    </item>
    <item>
      <title>Job Scheduling Rules</title>
      <description>&lt;h4&gt;&lt;span class="Apple-style-span" style="font-family: &#45796;&#51020;_Regular; font-size: 16px; line-height: normal;"&gt;Job &#49828;&#52992;&#51572;&#47553; &#44508;&#52825;&lt;/span&gt;&lt;/h4&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&#46041;&#49884;&#50640; &#49688;&#54665;&#46104;&#45716; &#51089;&#50629;&#46308;&#51012; &#44288;&#47532;&#54616;&#45716;&#45936;&#50640; &#51080;&#50612;&#49436;&amp;nbsp;&#51473;&#50836;&#54620; &#44163;&#51008; &#45796;&#51473; &#50416;&#47112;&#46300;&#46308;&#51060; &#44277;&#50976; &#51088;&#50896;&#51012; &#50504;&#51204;&#54616;&#44172; &#50529;&#49464;&#49828; &#54624; &#49688; &#51080;&#45716; &#48169;&#48277;&#51012; &#51228;&#44277;&#54616;&#45716; &#44163;&#51060;&#45796;. &#51060;&#44163;&#51008;&amp;nbsp;&#51068;&#48152;&#51201;&#51004;&#47196; &#53945;&#51221; &#51088;&#50896;&#51012; &#50529;&#49464;&#49828;&#54616;&#45716; &#46041;&#50504;&#50640;&amp;nbsp;&#51089;&#50629;&#51060; &#44536; &#51088;&#50896;&#50640; &#45824;&#54620;&amp;nbsp;&#46973;(lock)&#51012; &#54925;&#46301;&#54616;&#45716;&amp;nbsp;&#48169;&#48277;&#51012; &#51228;&#44277;&#54632;&#51004;&#47196;&#50024; &#51060;&#47336;&#50612;&#51652;&#45796;. &#46973;(locking)&#51012; &#49324;&#50857;&#54616;&#44172; &#46104;&#47732;&amp;nbsp;&#45936;&#46300;&#46973; - &#50668;&#47084; &#50416;&#47112;&#46300;&#44032; &#50668;&#47084; &#51088;&#50896;&#51012; &#49324;&#50857;&#54616;&#44592; &#50948;&#54644; &#44221;&#51137;&#54616;&#45716; &#49345;&#54889;&#50640;&#49436; &#45796;&#47480; &#50416;&#47112;&#46300;&#44032; &#51105;&#44256; &#51080;&#45716; &#46973;(lock) &#46412;&#47928;&#50640; &#50612;&#46496;&#54620; &#50416;&#47112;&#46300;&#46020; &#44536; &#51089;&#50629;&#51012; &#50756;&#47308;&#54624; &#49688; &#50630;&#45716; &#49345;&#54889; - &#51060; &#48156;&#49373;&#54624; &#49688; &#51080;&#45796;. &#45796;&#51020; &#44536;&#47548;&#51008; &#45936;&#46300;&#46973;&#51012; &#44036;&#45800;&#54616;&#44172; &#54364;&#54788;&#54620; &#44163;&#51060;&#45796;.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;An important aspect of managing concurrently running jobs is providing a means to ensure that multiple threads can safely access shared resources. This is typically done by providing a means for a job to acquire a lock on a particular resource while it is accessing&amp;nbsp;it. Locking gives rise to the possibility of deadlock, which is a situation where multiple threads are contending for multiple resources in such a way that none of the threads can complete their work because of locks held by other threads. The following diagram illustrates the simplest form of deadlock.&lt;/p&gt;
&lt;blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 38px; line-height: 2em; background-image: ; background-color: rgb(239, 239, 239); background-position: 14px 4px;"&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/thread.gif" height="147" width="388" style="" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&#51060; &#49884;&#45208;&#47532;&#50724;&#50640;&#49436;&#45716;, &#46160; &#50416;&#47112;&#46300;&#44032; &#44033;&#44033;&#51032; &#51089;&#50629;&#51012; &#52376;&#47532;&#54616;&#44592; &#50948;&#54644; &#46973;&#51012; &#51105;&#44256; &#51080;&#50612;&#50556; &#54616;&#44256;, &#51089;&#50629;&#51060; &#45149;&#45208;&#47732; &#46973;&#51012; &#54400;&#50612;&#51460; &#44163;&#51060;&#46972; &#44032;&#51221;&#54620;&#45796;. &#44536;&#47084;&#45208;, &#44033; &#50416;&#47112;&#46300;&#45716;&amp;nbsp;&#45936;&#46300;&#46973;&#51012; &#48156;&#49373;&#49884;&#53420; &#49688; &#51080;&#45716;,&amp;nbsp;&#49436;&#47196; &#45796;&#47480; &#49692;&#49436;&#47196; &#46973;&#51012; &#50619;&#45716;&#45796;. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;&#50416;&#47112;&#46300;1&lt;/span&gt;&#51060; &#46973;A&#47484; &#51105;&#51012; &#51592;&#51020;&#50640; &lt;span class="Apple-style-span" style="font-style: italic;"&gt;&#50416;&#47112;&#46300;2&lt;/span&gt;&#44032; &#46973;B&#47484; &#51105;&#45716;&#45796;. &#44033;&#44033;&#51032; &#46973;&#51060; &#54400;&#50612;&#51648;&#44592; &#51204;&#50640; &#46160; &#50416;&#47112;&#46300;&#45716; &#45796;&#47480; &#50416;&#47112;&#46300;&#44032; &#44032;&#51652; &#46973;&#51012; &#50619;&#44256;&#51088; &#54620;&#45796;. &#44208;&#44397; &#45796;&#47480; &#50416;&#47112;&#46300;&#44032; &#51105;&#44256;&#51080;&#45912; &#46973;&#51012; &#54400;&#50612;&#51460; &#46412;&#44620;&#51648; &#44592;&#45796;&#47140;&#50556; &#54616;&#44256;, &#46160;&#48264;&#51704; &#46973;&#51012; &#50619;&#51012; &#49688; &#50630;&#44592; &#46412;&#47928;&#50640; &#51648;&#44552; &#51105;&#44256; &#51080;&#45716; &#46973;&#51012; &#54400;&#50612;&#51460; &#49688;&#46020; &#50630;&#45716;, &#46160; &#50416;&#47112;&#46300;&#44032; &#47924;&#54620;&#51221; &#48660;&#46973;&#46108;(blocked) &#49345;&#54889;&#51060; &#46108;&#45796;.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;In this scenario, we assume that both threads need to hold both locks to do some work and will release them when the work is done. However, they both obtain the locks in a different order which can lead to deadlock. T&lt;em style="line-height: 2em;"&gt;hread 1&lt;/em&gt;&amp;nbsp;obtains lock A while, at approximately the same time,&amp;nbsp;&lt;span class="apple-style-span" style="font-style: italic; line-height: 2em;"&gt;thread 2&lt;/span&gt;&amp;nbsp;obtains lock B. Before either lock is released, both threads try to obtain the other's lock. This results in both threads being blocked indefinitely since neither can continue until the other releases the held lock but neither will release a lock until the second lock is obtained.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Jobs API&#50640;&#49436; &#51228;&#44277;&#46104;&#45716;&amp;nbsp;&lt;code&gt;ISchedulingRule&lt;/code&gt;&amp;nbsp;&#51064;&#53552;&#54168;&#51060;&#49828;&#45716;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The&amp;nbsp;&lt;code&gt;ISchedulingRule&lt;/code&gt;&amp;nbsp;interface, provided as part of the Jobs API, allows clients to define locks that can be used to ensure exclusive access to resources when required while preventing deadlock from occurring in the situation where multiple running jobs try to access the same resources. A scheduling rule can be assigned to a job before it is scheduled. This allows the job manager to ensure that the required resources are available before starting the job.&lt;/p&gt;
&lt;pre&gt;
ISchedulingRule myRule = ...
     job.setSchedulingRule(myRule);
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;In order to avoid resource contention and deadlock, there are two constraints associated with scheduling rules:&lt;/p&gt;
&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 2em; line-height: 2em;"&gt;
&lt;li style="line-height: 2em;"&gt;No two jobs that require rules that conflicts with each other (or the same rule) can run at the same time, thus ensuring that resource contention is avoided.&lt;/li&gt;
&lt;li style="line-height: 2em;"&gt;The scheduling rule of a job must encompass all resource accesses that will be performed by the job.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The implementation of the &lt;code&gt;ISchedulingRule&lt;/code&gt; interface reflects these rules.&lt;/p&gt;
&lt;pre&gt;
public interface ISchedulingRule {
        public boolean isConflicting(ISchedulingRule rule);
        public boolean contains(ISchedulingRule rule);
}
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The first constraint is fairly self explanatory and is provided through the implementation of &lt;code&gt;isConflicting()&lt;/code&gt;. The second indicates the fact that a scheduling rule can be a combination of multiple rules. There are two ways to combine scheduling rules. One is to use a&lt;code&gt;MultiRule&lt;/code&gt; to contain two or more child rules. The other is for the implementer of the scheduling rules to implement a containment relationship between scheduling rules using the &lt;code&gt;contains()&lt;/code&gt; method. The rest of this section contains examples that illustrate these points.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tip.gif" height="13" width="62" style="" /&gt;This API does not make deadlock impossible. However, when deadlock occurs between the locking mechanisms provided by this API, a built-in deadlock detection facility will at least allow execution of the threads involved to continue (more on this later). Of course, deadlocks that involve other locking mechanisms will not be detected or resolved.&lt;/p&gt;
&lt;h4 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(34, 61, 103); font-size: 1.333em; line-height: 3em; background-image: ; background-color: initial; font-family: 'malgun gothic', dotum, gulim, sans-serif; background-position: 0px 100%;"&gt;Example 1: IResource and ISchedulingRule&lt;/h4&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The org.eclipse.core.resources plug-in implements the &lt;code&gt;ISchedulingRule&lt;/code&gt; mechanism by making all resource handles scheduling rules as well. That is to say that the &lt;code&gt;IResource&lt;/code&gt; interface extends &lt;code&gt;ISchedulingRule&lt;/code&gt;. The following example illustrates how to create a job that modifies one or more files in a project.&lt;/p&gt;
&lt;pre&gt;
final IProject project = 
           ResourcesPlugin.getWorkspace().getRoot().getProject("MyProject");
     Job job = new Job("Make Files") {
        public IStatus run(IProgressMonitor monitor) {
           try {
              monitor.beginTask("Create some files", 100);
              for (int i=0; i&amp;lt;10; i++) {
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_2.gif" height="13" width="24" style="" /&gt;              project.getFile("file" + i).create(
                    new ByteArrayInputStream(("This is file " + i).getBytes()),
                    false /* force */, new SubProgressMonitor(monitor, 10));
                 if (monitor.isCanceled()) return Status.CANCEL_STATUS;
              }
           } catch(CoreException e) {
              return e.getStatus();
           } finally {
              monitor.done();
           }
           return Status.OK_STATUS;
        }
     };
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" width="24" style="" /&gt;  job.setRule(ResourcesPlugin.getWorkspace().getRoot());
     job.schedule();
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The above code reserves exclusive write access to the resources contained in the workspace by associating a scheduling rule with the job (line&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" width="24" style="" /&gt;) . The job will not be run while other threads hold a conflicting rule. The &lt;code&gt;isConflicting()&lt;/code&gt; method of &lt;code&gt;IResource&lt;/code&gt; is implemented in such a way that a resource rule conflicts with the resource itself and any ancestor or descendant of the rule. This is illustrated by the following diagram.&lt;/p&gt;
&lt;blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 38px; line-height: 2em; background-image: ; background-color: rgb(239, 239, 239); background-position: 14px 4px;"&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/schedrule.gif" style="" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Given this relationship, our job will not run if a scheduling rule is held by another thread for the workspace root itself or for any of the resources contained in the workspace. Once this job is running, no other threads will be able to obtain a rule for the above-mentioned resources until the job in our example completes.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The problem with our previous example is that it locks the entire workspace while only touching files in a single project. This means that no other code, job or otherwise, that modifies any resource in the workspace can run concurrently with our job. To correct this, we could either provide a more specific scheduling rule (i.e. lock only what we need) or not provide a scheduling rule for the job at all. We can get away with the latter approach because the &lt;code&gt;IFile#create()&lt;/code&gt; method obtains a scheduling rule itself before creating the file. The &lt;code&gt;IFile create&lt;/code&gt; method would look something like this:&lt;/p&gt;
&lt;pre&gt;
public void create(InputStream in, boolean force, IProgressMonitor pm) {
        IResourceRuleFactory ruleFactory = 
              ResourcesPlugin.getWorkspace().getRuleFactory();
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_3.gif" height="13" width="24" style="" /&gt;     ISchedulingRule rule = ruleFactory.createRule(this);
        try {
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_4.gif" height="13" width="24" style="" /&gt;        Platform.getJobManager().beginRule(rule, pm);
           // create the file
        } finally {
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_5.gif" height="13" width="24" style="" /&gt;        Platform.getJobManager().endRule(rule);
        }
     }
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Notice that the determination of the scheduling rule is delegated to a rule factory (&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_3.gif" height="13" width="24" style="" /&gt;) obtained from the workspace. This rule factory is used by the resources plug-in, and should be used by clients of &lt;code&gt;IResource&lt;/code&gt; as well, in order to determine what rule to use when performing operations on a resource. The rule factory has methods for determining the rules for several different workspace modifications (resource creation, deletion, moves, copies, etc.). We won't go into the details of how these rules are determined, but clients should not make any assumptions about what rules are used for what operations; instead they should always query the rule factory. The rules can change depending on what resource is being modified or what project the resources are in (what repository the project is shared with, for instance).&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;In the &lt;code&gt;create&lt;/code&gt; method, we obtain the creation rule for the file. The rule will either be the file itself (since resources are also scheduling rules), an ancestor of the file (i.e. parent folder, project or even possibly the workspace root), or a combination of rules (using&lt;code&gt;&lt;a href="http://www.eclipse.org/articles/Article-Concurrency/jobs-api.html#MultiRule" style="color: rgb(86, 137, 66) !important; line-height: 2em; text-decoration: underline; cursor: pointer !important;"&gt;MultiRule&lt;/a&gt;&lt;/code&gt;) that includes the file.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Once we have the rule we need, we can use the &lt;code&gt;IJobManager&lt;/code&gt; API to obtain and release the rule. The code in line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_4.gif" height="13" width="24" style="" /&gt; ensures that either this thread already has a scheduling rule that matches or contains the file rule or, if no scheduling rule is held by the thread, that no other thread has obtained a rule that conflicts with the file rule. Once this rule is obtained it will prevent other threads from obtaining a conflicting rule. Other threads are prevented from obtaining conflicting rules until the rule is released in line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_5.gif" height="13" width="24" style="" /&gt;. To state this in terms of the resource API, our create method will block on line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_4.gif" height="13" width="24" style="" /&gt; until no other thread holds a scheduling rule on our file or any of its ancestor folders. Then, once our job is allowed to continue, any other thread that tries to obtain a lock on our file or any of its ancestor folders will block until line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_5.gif" height="13" width="24" style="" /&gt; is executed.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;When using the &lt;code&gt;beginRule/endRule&lt;/code&gt; API, it is important to always match a call to &lt;code&gt;beginRule()&lt;/code&gt; with a corresponding call to &lt;code&gt;endRule()&lt;/code&gt;using the identical rule (i.e., &lt;code&gt;endRule()&lt;/code&gt; uses the identity check, &lt;code&gt;==&lt;/code&gt;, not the equality check, &lt;code&gt;equals()&lt;/code&gt;) in the form shown above (i.e., the &lt;code&gt;beginRule&lt;/code&gt; must be inside the &lt;code&gt;try&lt;/code&gt; block). The reason is that, if the user cancels the job while the code is in the &lt;code&gt;beginRule&lt;/code&gt;, the&lt;code&gt;endRule&lt;/code&gt; must still be invoked.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;It is worth reiterating at this point that the thread that is calling the &lt;code&gt;create&lt;/code&gt; method must either not hold any scheduling rules or must hold a rule that encompasses the rule required by the file creation. If this is not the case, the the call to &lt;code&gt;beginRule&lt;/code&gt; will fail with a runtime exception. An encompassing rule can be any of the ancestors of the creation rule obtained from the rule factory or it can be a multi-rule which is presented in the next section.&lt;/p&gt;
&lt;h4 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(34, 61, 103); font-size: 1.333em; line-height: 3em; background-image: ; background-color: initial; font-family: 'malgun gothic', dotum, gulim, sans-serif; background-position: 0px 100%;"&gt;&lt;a id="MultiRule" style="color: rgb(86, 137, 66) !important; line-height: 2em; text-decoration: underline; cursor: pointer !important;" &gt;&lt;/a&gt;Example 2: Using MultiRule&lt;/h4&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;One of the restrictions of scheduling rules is that, if a running job holds a scheduling rule, it can only try to obtain new rules that are contained by the held rule. In other words, the outer-most scheduling rule obtained by a job must encompass all nested rules. In the previous example, we obtained the workspace root resource which encompasses all resources in the workspace. This works but, as we said before, it prevents any other jobs from modifying resources while our job is running.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The implication of the implementation of the &lt;code&gt;create&lt;/code&gt; method in our previous example is that we have options as to what rule we assign to our job (as shown in line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" width="24" style="" /&gt; of our job example).&lt;/p&gt;
&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 2em; line-height: 2em;"&gt;
&lt;li style="line-height: 2em;"&gt;We can obtain the workspace lock, as was done in line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" width="24" style="" /&gt;. This ensures that no other thread can operate on the files we are creating but will also prevent any other jobs from modifying any other resources in the workspace. In essence, this is the minimum level of concurrency (i.e., none).&lt;/li&gt;
&lt;li style="line-height: 2em;"&gt;We can provide no rule (&lt;code&gt;job.setRule(null)&lt;/code&gt;). This means that the rules for each file creation will be obtained one by one. For each file we try to create, the &lt;code&gt;create&lt;/code&gt; method will obtain the required rule, so we will still have exclusive access to the resource (or block until we get it). This will provide the maximum level of concurrency but the disadvantage is that our operation may not be atomic in the sense that other threads could modify the same files while the job is running but is not operating on that specific file. Another disadvantage is that there is overhead when a thread that does not hold a scheduling rule obtains one. There is also overhead associated with a running job that is blocked, as opposed to a job that hasn't started yet because of a scheduling rule conflict. Although this overhead is generally not a concern, it may be for some situations.&lt;/li&gt;
&lt;li style="line-height: 2em;"&gt;We can obtain a multi-rule which includes the rules for creating each file. This ensures the operation is atomic by preventing other jobs from operating on any of the files but provides increased concurrency because it allows other jobs to modify resources that do not conflict with the files being created (i.e., another job could modify other files but couldn't delete a parent directory of one of the files being created).&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Here is a method that defines a multi-rule that can be used to create multiple files.&lt;/p&gt;
&lt;pre&gt;
public ISchedulingRule createRule(IFile[] files) {
        ISchedulingRule combinedRule = null;
        IResourceRuleFactory ruleFactory = 
              ResourcesPlugin.getWorkspace().getRuleFactory();
        for (int i = 0; i &amp;lt; files.length; i++) {
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" width="24" style="" /&gt;        ISchedulingRule rule = ruleFactory.createRule(files[i]);
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_2.gif" height="13" width="24" style="" /&gt;        combinedRule = MultiRule.combine(rule, combinedRule);
        }
        return combinedRule;
     }
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;For each file, we obtain the creation rule from the rule factory (&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" width="24" style="" /&gt;). We combine the rules using a static helper on the &lt;code&gt;MultiRule&lt;/code&gt;class (&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_2.gif" height="13" width="24" style="" /&gt;). The &lt;code&gt;combine&lt;/code&gt; method will combine the rules in the most compact and specific form possible while ensuring that the rule that is returned encompasses the rules being combined. We could then change line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" width="24" style="" /&gt; of our previous example to the following line:&lt;/p&gt;
&lt;pre&gt;
job.setRule(createRule(files));
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;The job now will not run until the files are available and, once running, will only block other jobs that try to obtain rules on those specific files.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tip.gif" height="13" width="62" style="" /&gt; Although recommended whenever possible, it is not required that a job pre-define its scheduling rule. As stated previously, scheduling rules can be obtained within a running job using &lt;code&gt;IJobManager#beginRule()&lt;/code&gt;. So, for instance, if you have a job that operates on a large set of resources, you may want to obtain scheduling rules for sub-operations of the operation instead of the complete operation. However, there is overhead associated with obtaining a topmost scheduling rule so you may not want to obtain scheduling rules at the file level. A good rule of thumb when performing an operation on resources that span multiple projects is to divide the resources by project and obtain the required scheduling rules one project at a time. This is what the CVS plug-in does when performing operations on multiple projects.&lt;/p&gt;
&lt;h4 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(34, 61, 103); font-size: 1.333em; line-height: 3em; background-image: ; background-color: initial; font-family: 'malgun gothic', dotum, gulim, sans-serif; background-position: 0px 100%;"&gt;Example 3: Read-access to Resources&lt;/h4&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Read access to resources does not require a scheduling rule. One implication of this is that information about resources, including the contents of files, can be accessed without blocking other threads that are modifying those resources. Another implication is that, when accessing resources in the workspace in a read-only fashion without holding a scheduling rule, the client must be aware that pre-checks cannot be used to guarantee the state of a resource at any future point. The following example illustrates this.&lt;/p&gt;
&lt;pre&gt;
IFile file = // some file&lt;br /&gt;
     try {&lt;br /&gt;
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" width="24" style="" /&gt;     if (file.exists()) {&lt;br /&gt;
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_2.gif" height="13" width="24" style="" /&gt;        InputStream stream = file.getContents();&lt;br /&gt;
           // Do something with the file contents&lt;br /&gt;
        }&lt;br /&gt;
     } catch (CoreException e) {&lt;br /&gt;
&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_3.gif" height="13" width="24" style="" /&gt;     if (e.getStatus().getCode() == IResourceStatus.RESOURCE_NOT_FOUND) {&lt;br /&gt;
           // Resource no longer exists. Deal with it&lt;br /&gt;
        } else {&lt;br /&gt;
           handleError(e);&lt;br /&gt;
        }&lt;br /&gt;
     }
&lt;/pre&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;In line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" width="24" style="" /&gt;, we check whether a file exists before accessing its contents. However, the file could be deleted by another thread after line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" width="24" style="" /&gt; is executed but before line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_2.gif" height="13" width="24" style="" /&gt; is. This will result in an exception. To make our code thread-safe, we add the existence check in line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_3.gif" height="13" width="24" style="" /&gt; that allows us to verify, after the fact, that the file we cared about has been deleted. We can then do whatever we would have done for the file if the existence check in line &lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tag_1.gif" height="13" width="24" style="" /&gt; had failed.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tip.gif" height="13" width="62" style="" /&gt; Although the resource rule factory does have a method for obtaining a marker creation rule, creating a marker does not currently require a scheduling rule. This allows marker creation to be done in the background without affecting other threads that are modifying resources. Clients should still obtain the rule from the rule factory, because it is possible that marker creation could require a rule in the future.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/tip.gif" height="13" width="62" style="" /&gt;There is a bit of a caveat when reading and writing files concurrently, at least on Linux and Windows. If one thread writes to a file as another is reading, it is possible that the reading thread could start reading the new contents. This is not very likely to happen unless a thread blocks while reading a file since the reading thread will most likely use buffering and will be able to keep ahead of the writing thread. However, if your application must ensure that the contents read from a file are consistent, then some mechanism, be it the use of scheduling rules or some other mechanism, should be used.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;img src="http://www.eclipse.org/articles/Article-Concurrency/images/win_only.gif" height="13" width="49" style="" /&gt;On windows, the deletion of a file will fail if another thread is reading the contents of the file. Again, this can be handled by using scheduling rules when reading but can also be handled by catching the deletion failure and notifying the user. The latter approach is what is used by the Windows file explorer.&lt;/p&gt;
</description>
      <pubDate>Wed, 08 Apr 2009 16:36:24 +0900</pubDate>
      <link>http://eclipse-articles.springnote.com/pages/2453884</link>
      <guid>http://eclipse-articles.springnote.com/pages/2453884</guid>
    </item>
    <item>
      <title>The Way We Were</title>
      <description>&lt;h2&gt;&lt;span class="Apple-style-span" style="font-family: &#45796;&#51020;_Regular; font-size: 16px; line-height: normal;"&gt;The Way We Were&lt;/span&gt;&lt;/h2&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px;"&gt;Before Eclipse 3.0, operations on any resources would lock the entire workspace. At the tail end of this operation, the delta phase occurred and any interested parties could respond to the changes made, including builders, which were given an opportunity to perform incremental builds in response to the changes made by the operation. The advantage of this approach was its simplicity. Clients could write operations and resource delta listeners without worrying about concurrency.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;Eclipse 3.0 &#51060;&#51204; &#48260;&#51204;&#50640;&#49436;&#45716;, &#51088;&#50896;&#51012; &#49324;&#50857;&#54616;&#45716; &#51089;&#50629;&#51008;&amp;nbsp;&#50892;&#53356;&#49828;&#54168;&#51060;&#49828;&amp;nbsp;&#51204;&#52404;&#47484;&amp;nbsp;&#46973;(lock)&#54616;&#44172;&#45140; &#46104;&#50612;&#51080;&#45796;. &#51060;&#47084;&#54620; &#51089;&#50629;&#51032; &#47568;&#48120;&#50640;&#45716; delta phase&#44032; &#51068;&#50612;&#45208;&#47728;, any interested parties&#51008; &#51060; &#51089;&#50629;&#50640; &#51064;&#54644; &#48156;&#49373;&#54620; &#48320;&#54868;&#50640; &#48152;&#51025;&#54616;&#44592; &#50948;&#54620; incremental build&#47484; &#49688;&#54665;&#54624; &#49688; &#51080;&#45716; &#44592;&#54924;&#44032; &#51452;&#50612; &#51648;&#45716; builder&#46308;&#51012; &#54252;&#54632;&#54616;&#50668; &#48320;&#44221;&#46108; &#49324;&#54637;&#50640; &#48152;&#51025;&#54624; &#49688;&#46020; &#51080;&#45796;. &#51060;&#47084;&#54620;&amp;nbsp;&#51217;&#44540; &#48169;&#49885;&#51008; &#45800;&#49692;&#54616;&#45796;&#45716; &#51109;&#51216;&#51060; &#51080;&#45796;.&amp;nbsp;&#49324;&#50857;&#51088;&#46308;&#51008; &#48337;&#54665;&#49457;(Concurrency)&#47484; &#44256;&#47140;&#54616;&#51648; &#50506;&#44256; operation &#48143; resouce delta listener&#47484; &#50424; &#49688; &#51080;&#45796;&#45716; &#44163;&#51060;&#45796;.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 13px; line-height: 26px;"&gt;The disadvantage of the pre-3.0 approach was that the user had to wait until an operation completed before the UI became responsive again. The UI still provided the user the ability to cancel the currently running operation but no other work could be done until the operation completed. Some operations were performed in the background (resource decoration and JDT file indexing are two such examples) but these operations were restricted in the sense that they could not modify the workspace. If a background operation did try to modify the workspace, the UI thread would be blocked if the user explicitly performed an operation that modified the workspace and, even worse, the user would not be able to cancel the operation. A further complication with concurrency was that the interaction between the independent locking mechanisms of different plug-ins often resulted in deadlock situations. Because of the independent nature of the locks, there was no way for Eclipse to recover from the deadlock, which forced users to kill the application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;3.0 &#51060;&#51204; &#51217;&#44540;&#48169;&#49885;&#51032; &#45800;&#51216;&#51008; &#49324;&#50857;&#51088;&#45716; UI&#44032; &#45796;&#49884; &#49324;&#50857;&#46112; &#49688; &#51080;&#45716; &#49345;&#53468;&#47196; &#46028;&#50500;&#50724;&#44592; &#51204;&#50640; &#51089;&#50629;&#51060; &#50756;&#47308;&#46112; &#46412;&#44620;&#51648; &#44592;&#45796;&#47140;&#50556;&#47564; &#54664;&#45796;&#45716; &#44163;&#51060;&#45796;. UI&#45716; &#49324;&#50857;&#51088;&#44032; &#54788;&#51116; &#49688;&#54665;&#51473;&#51064; &#51089;&#50629;&#51012; &#52712;&#49548;&#54624; &#49688; &#51080;&#45716; &#44428;&#54620;&#51012; &#51228;&#44277;&#54664;&#51648;&#47564;, &#45796;&#47480; &#50612;&#46500;&amp;nbsp;&#51089;&#50629;&#46020; &#54788;&#51116; &#51089;&#50629;&#51060; &#50756;&#47308;&#46112; &#46412;&#44620;&#51648;&#45716; &#49688;&#54665;&#46112; &#49688; &#50630;&#50632;&#45796;&#45716; &#44163;&#51060;&#45796;.&amp;nbsp; Resource decoration &#44536;&#47532;&#44256; JDT file indexing&#44284; &#44057;&#51008;&amp;nbsp;&#44592;&#53440; &#51089;&#50629;&#46308;&#51008; &#48177;&#44536;&#46972;&#50868;&#46300;&#47196; &#49892;&#54665;&#46104;&#50632;&#51648;&#47564;, &#50892;&#53356;&#49828;&#54168;&#51060;&#49828;&#47484; &#49688;&#51221; &#46608;&#45716; &#48320;&#44221;&#54624; &#49688; &#50630;&#50632;&#45796;&#45716; &#51216;&#50640;&#49436; &#51228;&#54620;&#51201;&#51060;&#50632;&#45796;.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&#47564;&#50557; &#48177;&#44536;&#46972;&#50868;&#46300; &#51089;&#50629;&#51060;&amp;nbsp;&#50892;&#53356;&#49828;&#54168;&#51060;&#49828;&#47484; &#49688;&#51221; &#46608;&#45716; &#48320;&#44221;&#54616;&#47140; &#54664;&#44256;. &#49324;&#50857;&#51088;&#44032; &#51649;&#51217;&#51201;&#51004;&#47196;&amp;nbsp;&#50892;&#53356;&#49828;&#54168;&#51060;&#49828;&#47484; &#49688;&#51221; &#46608;&#45716; &#48320;&#44221;&#54616;&#45716; &#51089;&#50629;&#51012; &#49688;&#54665;&#54664;&#45796;&#47732;, UI &#50416;&#47112;&#46300;&#45716; &#52264;&#45800;(block) &#46104;&#50632;&#51012; &#44163;&#51060;&#44256;, &#52572;&#50501;&#51032; &#44221;&#50864; &#49324;&#50857;&#51088;&#45716; &#51060; &#51089;&#50629;&#51032; &#52712;&#49548;&#46020; &#54616;&#51648; &#47803;&#54664;&#51012; &#44163;&#51060;&#45796;. &#48337;&#54665;&#49457;(Concurrency)&#51032; &#45908; &#48373;&#51105;&#54620; &#51216;&#51008; &#44368;&#52265;&#49345;&#53468;(deadlock)&#47484; &#50556;&#44592;&#49884;&#53420; &#49688; &#51080;&#45716; plug-in&#46308;&#51032; &#46021;&#47549;&#51201;&#51064; locking &#47700;&#52964;&#45768;&#51608;&#46308;&#44036; interaction&#51060;&#45796;. &#51060;&#47084;&#54620; lock&#51032; &#46021;&#47549;&#51201;&#51064; &#53945;&#49457;&#46412;&#47928;&#50640; Eclipse&#44032;&amp;nbsp;&#49324;&#50857;&#51088;&#44032; &#50528;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#44053;&#51228;&#51201;&#51004;&#47196; &#51333;&#47308;&#54644;&#50556;&#47564; &#54616;&#45716; &#44536;&#47088; &#44368;&#52265;&#49345;&#53468;(deadlock)&#50640;&#49436; &#48279;&#50612;&#45216; &#49688; &#51080;&#45716; &#48169;&#48277;&#51060; &#50630;&#45716; &#44163;&#51060;&#45796;.&lt;/p&gt;
</description>
      <pubDate>Wed, 08 Apr 2009 16:17:16 +0900</pubDate>
      <link>http://eclipse-articles.springnote.com/pages/2453900</link>
      <guid>http://eclipse-articles.springnote.com/pages/2453900</guid>
    </item>
    <item>
      <title>The Brave New World</title>
      <description>&lt;h2&gt;&lt;span class="Apple-style-span" style="font-family: &#45796;&#51020;_Regular; font-size: 16px; line-height: normal;"&gt;The Brave New World&lt;/span&gt;&lt;/h2&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&#50892;&#53356;&#49828;&#54168;&#51060;&#49828; locking &#47700;&#52964;&#45768;&#51608;&#51060; &#51228;&#44277;&#54616;&#45716; &#44592;&#45733;&#46308;&#51008; &#45796;&#51020;&#51032; &#49464; &#44032;&#51648; &#52769;&#47732;&#51004;&#47196; &#48516;&#47448;&#54624; &#49688; &#51080;&#45796;:&lt;/p&gt;
&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 2em; line-height: 2em;"&gt;
&lt;li style="line-height: 2em;"&gt;&#45796;&#49688;&#51032; &#51089;&#50629;&#51060; &#46041;&#49884;&#50640; &#44057;&#51008; &#51088;&#50896;&#51012;&amp;nbsp;&#49688;&#51221;&#54616;&#51648; &#47803;&#54616;&#46020;&#47197;&#54616;&#45716; &#51088;&#50896; &#51104;&#44552;(Resource locking).&lt;/li&gt;
&lt;li style="line-height: 2em;"&gt;&#51089;&#50629;&#51473; UI &#50504;&#51221;&#49457; &#54869;&#48372;&#47484; &#50948;&#54620; Resource change batching.&lt;/li&gt;
&lt;li style="line-height: 2em;"&gt;Incremental building&#51012; &#49688;&#54665;&#54616;&#44592; &#50948;&#54620; &#51201;&#51208;&#54620; &#49884;&#44592; &#54028;&#50501;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&#51089;&#50629; API &#49548;&#44060;&#50752; &#54632;&#44760; &#51060;&#47088; &#50689;&#50669;&#46308;&#51008; &#50668;&#47084; &#47700;&#52964;&#45768;&#51608;&#51004;&#47196; &#48516;&#47448;&#47484; &#54616;&#50688;&#51004;&#47728; &#52628;&#44032;&#51201;&#51064; &#44592;&#45733;&#46308;&#51060; &#52628;&#44032; &#46104;&#50632;&#45796;. &#45796;&#51020; &#47532;&#49828;&#53944;&#45716; &#52628;&#44032;&#46108; &#44592;&#45733;&#46308;&#51032; &#50836;&#50557;&#51060;&#45796;.&lt;/p&gt;
&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 2em; line-height: 2em;"&gt;
&lt;li style="line-height: 2em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New';"&gt;Job &#53364;&#47000;&#49828;&lt;/span&gt;: &#49457;&#45733; &#51089;&#50629; &#46608;&#45716; &#48177;&#44536;&#46972;&#50868;&#46300; &#51089;&#50629;&#46321;&#51012; &#51648;&#50896;.&lt;/li&gt;
&lt;li style="line-height: 2em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New';"&gt;ISchedulingRule&amp;nbsp;&lt;/span&gt;&#51064;&#53552;&#54168;&#51060;&#49828;: &#50612;&#46500; &#51089;&#50629;&#51060; &#48337;&#54665;&#51201;&#51004;&#47196; &#46041;&#51089;&#54624; &#49688; &#51080;&#45716;&#51648; &#44208;&#51221;&#54616;&#45716; &#44163;&#51012; &#51648;&#50896;.&lt;/li&gt;
&lt;li style="line-height: 2em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New';"&gt;WorkspaceJob&#44284;&lt;/span&gt;&amp;nbsp;&#46160; &#44060;&#51032;&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New';"&gt;IWorkspace#run()&amp;nbsp;&lt;/span&gt;&#47700;&#50136;&#46300;: support for batching of delta change notifications.&lt;/li&gt;
&lt;li style="line-height: 2em;"&gt;Background auto-build: &#51088;&#50896;&#50640; &#50689;&#54693;&#51012; &#51452;&#45716; &#51089;&#50629;&#51060; &#50630;&#51012; &#44221;&#50864;, &#51613;&#48516; &#48716;&#46300;(incremental build, &#50669;:&#49352;&#47196;&#50868; &#44163;&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 11px; line-height: 15px;"&gt;&#47564; &#45796;&#49884; &#48716;&#46300;&#54616;&#45716; &#44163;&lt;/span&gt;)&#51032; &#49892;&#54665;.&lt;/li&gt;
&lt;li style="line-height: 2em;"&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New';"&gt;ILock&lt;/span&gt;&lt;/code&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New';"&gt;&amp;nbsp;&lt;/span&gt;&#51064;&#53552;&#54168;&#51060;&#49828;:&amp;nbsp;&#44368;&#52265;&#49345;&#53468; &#44048;&#51648; &#48143; &#48373;&#44396;&lt;/li&gt;
&lt;li style="line-height: 2em;"&gt;&#48177;&#44536;&#46972;&#50868;&#46300;&#47196; &#49892;&#54665;&#46104;&#45716; job&#50640; &#45824;&#54620; &#49324;&#50857;&#51088; &#54588;&#46300;&#48177; &#54872;&#44208; &#49444;&#51221;&#51012; &#50948;&#54620; Job &#49549;&#49457;&#46308;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&#51060; &#44544;&#51008; &#51648;&#44552;&#48512;&#53552; &#50948;&#50640; &#50616;&#44553;&#46108; &#44592;&#45733;&#46308;&#51032; &#49324;&#50857; &#50696;&#51228;&#47484; &#51228;&#44277;&#54620;&#45796;.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 2em;"&gt;&amp;nbsp;&lt;/p&gt;
</description>
      <pubDate>Wed, 25 Mar 2009 13:56:12 +0900</pubDate>
      <link>http://eclipse-articles.springnote.com/pages/2453898</link>
      <guid>http://eclipse-articles.springnote.com/pages/2453898</guid>
    </item>
  </channel>
</rss>

