锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲av色影在线,久久精品国产精品亚洲毛片,亚洲成a人片在线不卡http://m.tkk7.com/ivanwan/archive/2010/12/25/341536.htmlivaneeoivaneeoSat, 25 Dec 2010 15:15:00 GMThttp://m.tkk7.com/ivanwan/archive/2010/12/25/341536.htmlhttp://m.tkk7.com/ivanwan/comments/341536.htmlhttp://m.tkk7.com/ivanwan/archive/2010/12/25/341536.html#Feedback0http://m.tkk7.com/ivanwan/comments/commentRss/341536.htmlhttp://m.tkk7.com/ivanwan/services/trackbacks/341536.html闃呰鍏ㄦ枃

ivaneeo 2010-12-25 23:15 鍙戣〃璇勮
]]>
Interop Between Java and Scalahttp://m.tkk7.com/ivanwan/archive/2010/12/25/341534.htmlivaneeoivaneeoSat, 25 Dec 2010 15:08:00 GMThttp://m.tkk7.com/ivanwan/archive/2010/12/25/341534.htmlhttp://m.tkk7.com/ivanwan/comments/341534.htmlhttp://m.tkk7.com/ivanwan/archive/2010/12/25/341534.html#Feedback0http://m.tkk7.com/ivanwan/comments/commentRss/341534.htmlhttp://m.tkk7.com/ivanwan/services/trackbacks/341534.html闃呰鍏ㄦ枃

ivaneeo 2010-12-25 23:08 鍙戣〃璇勮
]]>
Unit鎰忎箟http://m.tkk7.com/ivanwan/archive/2010/12/25/341511.htmlivaneeoivaneeoSat, 25 Dec 2010 02:59:00 GMThttp://m.tkk7.com/ivanwan/archive/2010/12/25/341511.htmlhttp://m.tkk7.com/ivanwan/comments/341511.htmlhttp://m.tkk7.com/ivanwan/archive/2010/12/25/341511.html#Feedback0http://m.tkk7.com/ivanwan/comments/commentRss/341511.htmlhttp://m.tkk7.com/ivanwan/services/trackbacks/341511.htmlUnit鐨勭粨鏋滅被鍨嬫寚鐨勬槸鍑芥暟娌℃湁榪斿洖鏈夌敤鐨勫箋係cala鐨刄nit綾誨瀷姣旇緝鎺ヨ繎Java鐨剉oid綾誨瀷錛岃屼笖瀹為檯涓奐ava閲屾瘡涓涓繑鍥瀡oid鐨勬柟娉曢兘琚槧灝勪負(fù)Scala閲岃繑鍥濽nit鐨勬柟娉?/strong>銆傚洜姝ょ粨鏋滅被鍨嬩負(fù)Unit鐨勬柟娉曪紝浠呬粎鏄負(fù)浜嗗畠浠殑鍓綔鐢ㄨ岃繍琛屻?

ivaneeo 2010-12-25 10:59 鍙戣〃璇勮
]]>
Apache Pivot + Scala緙栧啓鐨勪竴涓皬搴旂敤錛氭棩蹇楀垎鏋?/title><link>http://m.tkk7.com/ivanwan/archive/2010/12/23/341411.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Thu, 23 Dec 2010 12:37:00 GMT</pubDate><guid>http://m.tkk7.com/ivanwan/archive/2010/12/23/341411.html</guid><wfw:comment>http://m.tkk7.com/ivanwan/comments/341411.html</wfw:comment><comments>http://m.tkk7.com/ivanwan/archive/2010/12/23/341411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/ivanwan/comments/commentRss/341411.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/ivanwan/services/trackbacks/341411.html</trackback:ping><description><![CDATA[<br /> <div id="gcye844" class="blog_title"> <h3><a >Apache Pivot + Scala緙栧啓鐨勪竴涓皬搴旂敤錛氭棩蹇楀垎鏋?/a></h3> </div> <div id="mqikgoo" class="blog_content"> <div id="4i8s4y4" class="dp-highlighter"> <div id="64gcu8q" class="bar"> <div id="8mu4w84" class="tools">Scala浠g爜 </div> </div> <ol class="dp-default" start="1"> <li><span><span>package org.apache.pivot.scala.log  </span></span></li> <li><span>  </span></li> <li><span>import scala.reflect.BeanProperty  </span></li> <li><span>import io.Source  </span></li> <li><span>import org.apache.pivot.wtk.content.ListViewItemRenderer  </span></li> <li><span>import java.lang.String  </span></li> <li><span>import org.apache.pivot.wtkx.{WTKX, WTKXSerializer}  </span></li> <li><span>  </span></li> <li><span>/*涓轟簡閬垮厤鍜宻cala.Application鐨勫悕縐板啿紿侊紝榪欓噷淇敼浜嗗埆鍚?/  </span></li> <li><span>import org.apache.pivot.wtk.{ Application => PivotApplication, _}  </span></li> <li><span>import org.apache.pivot.collections.{ArrayList, Map}  </span></li> <li><span>  </span></li> <li><span>/**  </span></li> <li><span> * Created by IntelliJ IDEA.  </span></li> <li><span> * User: Administrator  </span></li> <li><span> * Date: <span id="kcq4488" class="number">2010</span><span>-</span><span id="ois8ume" class="number">8</span><span>-</span><span id="g8co4oa" class="number">26</span><span>  </span></span></li> <li><span> * Time: <span id="8q4awgw" class="number">10</span><span>:</span><span id="u8oawus" class="number">36</span><span>:</span><span id="oq4444g" class="number">45</span><span>  </span></span></li> <li><span> * To change this template use File | Settings | File Templates.  </span></li> <li><span> */  </span></li> <li><span>  </span></li> <li><span>/*鏃ュ織璁板綍Bean瀵硅薄,鐢變簬Scala鏍囧噯鐢熸垚鐨勫瓧孌典笉浣跨敤getter/setter鐨勬牸寮忥紝  </span></li> <li><span>    浣嗘槸鎻愪緵浜嗘敞瑙?nbsp;@scala.reflect.BeanProperty 錛屼嬌寰楃紪璇戝櫒鍙互鐢熸垚鏍囧噯鐨凧avaBean瀵硅薄鐨刧etter/setter鎺ュ彛   </span></li> <li><span>    val 鍙敓鎴愪簡getter  </span></li> <li><span>    var 鍚屾椂鐢熸垚浜唃etter鍜宻etter */  </span></li> <li><span>class LogRecord ( @BeanProperty val threadName : String,  </span></li> <li><span>                  @BeanProperty val date : String,  </span></li> <li><span>                  @BeanProperty val time : String,  </span></li> <li><span>                  @BeanProperty val module : String,  </span></li> <li><span>                  @BeanProperty val level : String,  </span></li> <li><span>                  @BeanProperty val content : String){  </span></li> <li><span>  </span></li> <li><span>    /*  </span></li> <li><span>        閲嶈澆浜?nbsp;Any鐨?nbsp;toString鎺ュ彛  </span></li> <li><span>        override鍏抽敭瀛楁槸蹇呴』鐨勶紝鍦╦ava涓嬌鐢ㄧ殑鏄敞瑙?nbsp;@override,浣嗘槸java涓瑻override騫朵笉鏄繀欏葷殑銆?nbsp; </span></li> <li><span>        鐪佺暐浜?nbsp;鍑芥暟榪樺洖鍊鹼紝鐢辯紪璇戝櫒榪涜綾誨瀷鎺ㄦ紨寰楀埌  </span></li> <li><span>    */  </span></li> <li><span>  override def toString()  = {  </span></li> <li><span>    threadName +<span id="8444g8i" class="string">" "</span><span>+date +</span><span id="ikcq44g" class="string">" "</span><span>+ time +</span><span id="8g8i4ky" class="string">" "</span><span>+module +</span><span id="6aocgw8" class="string">" "</span><span>+level+</span><span id="o8ic4kg" class="string">" "</span><span>+content  </span></span></li> <li><span>  }  </span></li> <li><span>  </span></li> <li><span>}  </span></li> <li><span>  </span></li> <li><span>/*  </span></li> <li><span>    LogRecord 綾葷殑鍗婄敓瀵硅薄  </span></li> <li><span>    瀹氫箟浜?nbsp;scala涓殑欖旀湳鎺ュ彛 apply 錛屼嬌寰楀彲浠ヤ嬌鐢?nbsp; LogRecord(<span id="8ci44wc" class="string">"sting 鏂囨湰"</span><span>) 鍙互鍒涘緩涓涓猚lass LogRecord瀵硅薄銆?nbsp; </span></span></li> <li><span>    apply鏂規(guī)硶鐨勮皟鐢ㄧ敱緙栬瘧鍣ㄨ嚜鍔ㄨ皟鐢紝鎴戜滑鍙礋璐e畾涔夊嵆鍙?nbsp; </span></li> <li><span>    鎴戜滑瑕佽В鏋愮殑鏃ュ織鏍煎紡  </span></li> <li><span>      </span></li> <li><span>threadName date    time     module       Level   content  </span></li> <li><span>DVOSMAIN <span id="4oy8s4w" class="number">08</span><span>/</span><span id="ysciomm" class="number">26</span><span>/</span><span id="m8y8is8" class="number">10</span><span> </span><span id="akm4a4o" class="number">10</span><span>:</span><span id="8acy4eg" class="number">17</span><span>:</span><span id="84e4coo" class="number">17</span><span> LOGINFO     : INFO  - Debug level: </span><span id="k4o4ski" class="number">2</span><span>  </span></span></li> <li><span>DVOSMAIN <span id="8o4y4u4" class="number">08</span><span>/</span><span id="ake4c4i" class="number">26</span><span>/</span><span id="8eye4wu" class="number">10</span><span> </span><span id="kssgcag" class="number">10</span><span>:</span><span id="qoq48m4" class="number">17</span><span>:</span><span id="8o84444" class="number">17</span><span> LOGINFO     : INFO  - *=ERROR WARNING EXCEPT  </span></span></li> <li><span>DVOSMAIN <span id="aos8gy4" class="number">08</span><span>/</span><span id="ck84uso" class="number">26</span><span>/</span><span id="8g48mki" class="number">10</span><span> </span><span id="sikq4ka" class="number">10</span><span>:</span><span id="8qsquk4" class="number">17</span><span>:</span><span id="ouo4y44" class="number">17</span><span> LOGINFO     : INFO  - LM=*  </span></span></li> <li><span>  </span></li> <li><span>*/  </span></li> <li><span>object LogRecord {  </span></li> <li><span>  def apply( line : String  ) : LogRecord = {  </span></li> <li><span>  </span></li> <li><span>        /*鐢熸垚涓涓?nbsp;Regex瀵硅薄錛岀敤浜庢ā寮忓尮閰?/  </span></li> <li><span>    val logRegex = <span id="8yagka4" class="string">""</span><span id="i4wiuao" class="string">"([A-Za-z0-9]+) +([0-9/]*) +([0-9:]*) +([A-Z]*) +: *([A-Z_]+).*"</span><span id="qoic84y" class="string">""</span><span>.r  </span></span></li> <li><span>  </span></li> <li><span>    line match {  </span></li> <li><span>        /*濡傛灉妯″紡鍖歸厤鎴愬姛錛宼hreadName,date,time,module,level 鍒嗛厤鎸夋搴忕粦瀹氬埌妯″紡鍖歸厤琛ㄨ揪寮忎腑()鐨勫唴瀹?nbsp;*/  </span></li> <li><span>      case logRegex(threadName,date,time,module,level) =>  </span></li> <li><span>          val logRecord: LogRecord = new LogRecord( threadName, date, time, module, level,line)  </span></li> <li><span>            logRecord  </span></li> <li><span>            /*妯″紡鍖歸厤閫氶厤絎︼紝鍦ㄦ病鏈夊尮閰嶅埌鐨勬儏鍐典笅錛屽仛閫氱敤澶勭悊銆傚鏋滀笉娣誨姞錛屽湪鍖歸厤涓嶅埌鏃朵細鎶涘嚭 MatchError寮傚父*/  </span></li> <li><span>      case _ =>  </span></li> <li><span>          val logRecord: LogRecord = new LogRecord(<span id="wuo84sy" class="string">"N/A"</span><span>,</span><span id="mce444a" class="string">"N/A"</span><span>,</span><span id="4uos4ek" class="string">"N/A"</span><span>,</span><span id="cisuesi" class="string">"N/A"</span><span>,</span><span id="wm4wc44" class="string">"N/A"</span><span>,</span><span id="4yise6e" class="string">"N/A"</span><span>)  </span></span></li> <li><span>            logRecord  </span></li> <li><span>    }  </span></li> <li><span>  </span></li> <li><span>  }  </span></li> <li><span>}  </span></li> <li><span>  </span></li> <li><span>/*  </span></li> <li><span>    Apache Pivot ListView ItemRenderer   </span></li> <li><span>    閲嶆柊瀹氫箟浜嗗浣曟樉紺?nbsp;LogRecord瀵硅薄鐨?nbsp;鍒楄〃欏圭洰鐨勬覆鏌撱?nbsp; </span></li> <li><span>    濡傛灉浣跨敤榛樿鐨勶紝閭d箞ListView鏄劇ず瀵硅薄鏃訛紝鐩存帴璋冪敤瀵硅薄鐨則oString鑾峰緱鍏跺瓧絎︿覆琛ㄧず  </span></li> <li><span>*/  </span></li> <li><span>class LogListViewItemRenderer extends ListViewItemRenderer {  </span></li> <li><span>  </span></li> <li><span>  imageView.setVisible(false)  </span></li> <li><span>  </span></li> <li><span>  override def render(item: AnyRef, index: Int, listView: ListView, selected: Boolean, checked: Boolean, highlighted: Boolean, disabled: Boolean) = {  </span></li> <li><span>      if ( item != null && item.isInstanceOf[LogRecord])  </span></li> <li><span>        {  </span></li> <li><span>          val log = item.asInstanceOf[LogRecord]  </span></li> <li><span>          label.setText(log.content)  </span></li> <li><span>  </span></li> <li><span>       </span></li> <li><span>        }  </span></li> <li><span>  }  </span></li> <li><span>  </span></li> <li><span>  </span></li> <li><span>    </span></li> <li><span>}  </span></li> <li><span>  </span></li> <li><span>/**  </span></li> <li><span>    瀹氫箟涓葷獥鍙g晫闈唬鐮?蹇呴』緇ф壙鑷?nbsp;org.apache.pivot.Application  </span></li> <li><span>    浣跨敤浜?nbsp;@WTKX娉ㄨВ錛岃娉ㄨВ灞炰簬 wtkx鐨勫懡鍚嶅璞$殑緇戝畾璇硶錛屽湪浠巜tkx鏂囦歡鍔犺澆GUI鏃訛紝  </span></li> <li><span>    璋冪敤bind鎺ュ彛鍙互鑷姩鍜寃tkx鏂囦歡涓0鏄庣殑wtkx:id瀵硅薄榪涜緇戝畾錛屾棤闇鍦ㄦ帀鍚椾腑璋冪敤 get(<span id="aoa84kq" class="string">"name"</span><span>)  </span></span></li> <li><span>*/  </span></li> <li><span>class MainWindow extends PivotApplication {  </span></li> <li><span>  var window : Window   = null  </span></li> <li><span>  @WTKX var textInputFilePath : TextInput  = null  </span></li> <li><span>  @WTKX var browsePushButton : PushButton  = null  </span></li> <li><span>  @WTKX var loadPushButton : PushButton   = null  </span></li> <li><span>  @WTKX var textInputThreadName :TextInput   = null  </span></li> <li><span>  @WTKX var textInputModule : TextInput    = null  </span></li> <li><span>  @WTKX var textInputLevel : TextInput    = null  </span></li> <li><span>  @WTKX var textInputContent : TextInput   = null  </span></li> <li><span>  @WTKX var logListView : ListView = null  </span></li> <li><span>  </span></li> <li><span>  </span></li> <li><span>  def resume = {}  </span></li> <li><span>  </span></li> <li><span>  def suspend = {}  </span></li> <li><span>  </span></li> <li><span>  def shutdown(optional: Boolean) = {  </span></li> <li><span>    if ( window != null)  </span></li> <li><span>      {  </span></li> <li><span>        window.close  </span></li> <li><span>        true  </span></li> <li><span>      }  </span></li> <li><span>    false  </span></li> <li><span>  }  </span></li> <li><span>  </span></li> <li><span>  def startup(display: Display, properties: Map[String, String]) = {  </span></li> <li><span>    val wtkxSerializer = new WTKXSerializer()  </span></li> <li><span>    var matchString : String = null  </span></li> <li><span>  </span></li> <li><span>        /*浠巟ml(wtkx)鏂囦歡鍔犺澆GUI*/  </span></li> <li><span>    window = wtkxSerializer.readObject(this,<span id="i8ky8cs" class="string">"MainWindow.xml"</span><span>).asInstanceOf[Window]  </span></span></li> <li><span>  </span></li> <li><span>    wtkxSerializer.bind(this)  </span></li> <li><span>        if ( properties containsKey <span id="8km444a" class="string">"logfile"</span><span>)  </span></span></li> <li><span>        {  </span></li> <li><span>                textInputFilePath setText ( properties get <span id="ck4yuay" class="string">"logfile"</span><span>)  </span></span></li> <li><span>        }  </span></li> <li><span>          </span></li> <li><span>        /*緇?nbsp;Button娣誨姞浜嬩歡澶勭悊鍑芥暟*/  </span></li> <li><span>    browsePushButton.getButtonPressListeners.add( function2Listener (browseButtonPressed ) )  </span></li> <li><span>    loadPushButton.getButtonPressListeners.add( function2Listener(loadButtonPressed ))  </span></li> <li><span>      </span></li> <li><span>      </span></li> <li><span>    window.open(display)  </span></li> <li><span>  </span></li> <li><span>  }  </span></li> <li><span>  </span></li> <li><span>    /*嫻忚鎸夐挳浜嬩歡澶勭悊錛屾墦寮涓涓枃浠舵祻瑙堢獥鍙o紝璁╃敤鎴烽夋嫨鏂囦歡錛屽茍鍦ㄧ敤鎴峰叧闂璇濇鏃訛紝鎹曡幏鐢ㄦ埛閫夋嫨鐨勬枃浠跺悕*/  </span></li> <li><span>  def browseButtonPressed( button : Button ) : Unit = {  </span></li> <li><span>     val dialog : FileBrowserSheet = new   FileBrowserSheet(FileBrowserSheet.Mode.OPEN)  </span></li> <li><span>  </span></li> <li><span>    dialog.open( window, new SheetCloseListener() {  </span></li> <li><span>      def sheetClosed(sheet: Sheet) = {  </span></li> <li><span>        if ( sheet.getResult)  </span></li> <li><span>          {  </span></li> <li><span>             val fileBrowseSheet = sheet.asInstanceOf[FileBrowserSheet]  </span></li> <li><span>             textInputFilePath.setText( fileBrowseSheet.getSelectedFile.getPath.toString)  </span></li> <li><span>          }  </span></li> <li><span>      }  </span></li> <li><span>    })  </span></li> <li><span>  }  </span></li> <li><span>    </span></li> <li><span>  /*浠巐og鏂囦歡鍔犺澆鍐呭錛屾瘡涓琛屾槸涓涓棩蹇楄褰?nbsp; </span></li> <li><span>    for涓嬌鐢ㄤ簡 if榪囨護鍣紝鍙湁鏉′歡絎﹀悎浜嗭紝鎵嶄細榪涘叆for寰幆浣撱?nbsp; </span></li> <li><span>      </span></li> <li><span>    scala娌℃湁鎻愪緵continu錛岃屾槸鍦?nbsp;for涓彁渚涗簡鏉′歡榪囨護鏉ユ浛浠?nbsp; </span></li> <li><span>  */  </span></li> <li><span>  def loadButtonPressed( button : Button ) : Unit = {  </span></li> <li><span>     val logFile = Source.fromFile(textInputFilePath.getText)  </span></li> <li><span>     val list = new ArrayList[LogRecord]  </span></li> <li><span>    for ( line <- logFile.getLines ; logRecord = LogRecord(line.trim);  </span></li> <li><span>          if ( textInputThreadName.getText == <span id="suo4kq4" class="string">""</span><span> || textInputThreadName.getText.contains(logRecord.threadName) );  </span></span></li> <li><span>          if ( textInputModule.getText == <span id="4s4mous" class="string">""</span><span> || textInputModule.getText.contains(logRecord.module));  </span></span></li> <li><span>          if ( textInputLevel.getText == <span id="usukm44" class="string">""</span><span> || textInputLevel.getText.contains(logRecord.level))){  </span></span></li> <li><span>        </span></li> <li><span>      list add logRecord  </span></li> <li><span>    }  </span></li> <li><span>  </span></li> <li><span>    logListView.setListData( list)  </span></li> <li><span>      </span></li> <li><span>  }  </span></li> <li><span>    /*鎸夐挳浜嬩歡杈呭姪鎺ュ彛錛岀敤浜庢妸涓涓?nbsp;浜嬩歡澶勭悊鍑芥暟杞崲涓築uttonPressListener瀵硅薄錛屼篃鍙互閲囧彇鏇撮珮綰х殑鍐呭錛屼嬌鐢╥mplicit,榪欓噷娌℃湁浣跨敤*/  </span></li> <li><span>   def function2Listener( fun : Button => Unit ) :ButtonPressListener =  {  </span></li> <li><span>    val listener = new ButtonPressListener()  </span></li> <li><span>    {  </span></li> <li><span>      def buttonPressed(button: Button) = {  </span></li> <li><span>        fun(button)  </span></li> <li><span>      }  </span></li> <li><span>    }  </span></li> <li><span>  </span></li> <li><span>    listener  </span></li> <li><span>  }  </span></li> <li><span>}  </span></li> <li><span>  </span></li> <li><span>/*  </span></li> <li><span>    涓誨嚱鏁?nbsp; </span></li> <li><span>    絎﹀悎Pivot涓誨嚱鏁板叆鍙h鍒?nbsp; </span></li> <li><span>*/  </span></li> <li><span>object LogAnalyse {  </span></li> <li><span>  def main ( args : Array[String]) : Unit = {  </span></li> <li><span>  </span></li> <li><span>      </span></li> <li><span>    DesktopApplicationContext.main( classOf[MainWindow], args)  </span></li> <li><span>     </span></li> <li><span>  </span></li> <li><span>  }  </span></li> <li><span>}  </span></li> </ol> </div> <pre style="display: none;" name="code" class="Scala">package org.apache.pivot.scala.log import scala.reflect.BeanProperty import io.Source import org.apache.pivot.wtk.content.ListViewItemRenderer import java.lang.String import org.apache.pivot.wtkx.{WTKX, WTKXSerializer} /*涓轟簡閬垮厤鍜宻cala.Application鐨勫悕縐板啿紿侊紝榪欓噷淇敼浜嗗埆鍚?/ import org.apache.pivot.wtk.{ Application => PivotApplication, _} import org.apache.pivot.collections.{ArrayList, Map} /** * Created by IntelliJ IDEA. * User: Administrator * Date: 2010-8-26 * Time: 10:36:45 * To change this template use File | Settings | File Templates. */ /*鏃ュ織璁板綍Bean瀵硅薄,鐢變簬Scala鏍囧噯鐢熸垚鐨勫瓧孌典笉浣跨敤getter/setter鐨勬牸寮忥紝 浣嗘槸鎻愪緵浜嗘敞瑙?@scala.reflect.BeanProperty 錛屼嬌寰楃紪璇戝櫒鍙互鐢熸垚鏍囧噯鐨凧avaBean瀵硅薄鐨刧etter/setter鎺ュ彛 val 鍙敓鎴愪簡getter var 鍚屾椂鐢熸垚浜唃etter鍜宻etter */ class LogRecord ( @BeanProperty val threadName : String, @BeanProperty val date : String, @BeanProperty val time : String, @BeanProperty val module : String, @BeanProperty val level : String, @BeanProperty val content : String){ /* 閲嶈澆浜?Any鐨?toString鎺ュ彛 override鍏抽敭瀛楁槸蹇呴』鐨勶紝鍦╦ava涓嬌鐢ㄧ殑鏄敞瑙?@override,浣嗘槸java涓瑻override騫朵笉鏄繀欏葷殑銆? 鐪佺暐浜?鍑芥暟榪樺洖鍊鹼紝鐢辯紪璇戝櫒榪涜綾誨瀷鎺ㄦ紨寰楀埌 */ override def toString() = { threadName +" "+date +" "+ time +" "+module +" "+level+" "+content } } /* LogRecord 綾葷殑鍗婄敓瀵硅薄 瀹氫箟浜?scala涓殑欖旀湳鎺ュ彛 apply 錛屼嬌寰楀彲浠ヤ嬌鐢? LogRecord("sting 鏂囨湰") 鍙互鍒涘緩涓涓猚lass LogRecord瀵硅薄銆? apply鏂規(guī)硶鐨勮皟鐢ㄧ敱緙栬瘧鍣ㄨ嚜鍔ㄨ皟鐢紝鎴戜滑鍙礋璐e畾涔夊嵆鍙? 鎴戜滑瑕佽В鏋愮殑鏃ュ織鏍煎紡 threadName date time module Level content DVOSMAIN 08/26/10 10:17:17 LOGINFO : INFO - Debug level: 2 DVOSMAIN 08/26/10 10:17:17 LOGINFO : INFO - *=ERROR WARNING EXCEPT DVOSMAIN 08/26/10 10:17:17 LOGINFO : INFO - LM=* */ object LogRecord { def apply( line : String ) : LogRecord = { /*鐢熸垚涓涓?Regex瀵硅薄錛岀敤浜庢ā寮忓尮閰?/ val logRegex = """([A-Za-z0-9]+) +([0-9/]*) +([0-9:]*) +([A-Z]*) +: *([A-Z_]+).*""".r line match { /*濡傛灉妯″紡鍖歸厤鎴愬姛錛宼hreadName,date,time,module,level 鍒嗛厤鎸夋搴忕粦瀹氬埌妯″紡鍖歸厤琛ㄨ揪寮忎腑()鐨勫唴瀹?*/ case logRegex(threadName,date,time,module,level) => val logRecord: LogRecord = new LogRecord( threadName, date, time, module, level,line) logRecord /*妯″紡鍖歸厤閫氶厤絎︼紝鍦ㄦ病鏈夊尮閰嶅埌鐨勬儏鍐典笅錛屽仛閫氱敤澶勭悊銆傚鏋滀笉娣誨姞錛屽湪鍖歸厤涓嶅埌鏃朵細鎶涘嚭 MatchError寮傚父*/ case _ => val logRecord: LogRecord = new LogRecord("N/A","N/A","N/A","N/A","N/A","N/A") logRecord } } } /* Apache Pivot ListView ItemRenderer 閲嶆柊瀹氫箟浜嗗浣曟樉紺?LogRecord瀵硅薄鐨?鍒楄〃欏圭洰鐨勬覆鏌撱? 濡傛灉浣跨敤榛樿鐨勶紝閭d箞ListView鏄劇ず瀵硅薄鏃訛紝鐩存帴璋冪敤瀵硅薄鐨則oString鑾峰緱鍏跺瓧絎︿覆琛ㄧず */ class LogListViewItemRenderer extends ListViewItemRenderer { imageView.setVisible(false) override def render(item: AnyRef, index: Int, listView: ListView, selected: Boolean, checked: Boolean, highlighted: Boolean, disabled: Boolean) = { if ( item != null && item.isInstanceOf[LogRecord]) { val log = item.asInstanceOf[LogRecord] label.setText(log.content) } } } /** 瀹氫箟涓葷獥鍙g晫闈唬鐮?蹇呴』緇ф壙鑷?org.apache.pivot.Application 浣跨敤浜?@WTKX娉ㄨВ錛岃娉ㄨВ灞炰簬 wtkx鐨勫懡鍚嶅璞$殑緇戝畾璇硶錛屽湪浠巜tkx鏂囦歡鍔犺澆GUI鏃訛紝 璋冪敤bind鎺ュ彛鍙互鑷姩鍜寃tkx鏂囦歡涓0鏄庣殑wtkx:id瀵硅薄榪涜緇戝畾錛屾棤闇鍦ㄦ帀鍚椾腑璋冪敤 get("name") */ class MainWindow extends PivotApplication { var window : Window = null @WTKX var textInputFilePath : TextInput = null @WTKX var browsePushButton : PushButton = null @WTKX var loadPushButton : PushButton = null @WTKX var textInputThreadName :TextInput = null @WTKX var textInputModule : TextInput = null @WTKX var textInputLevel : TextInput = null @WTKX var textInputContent : TextInput = null @WTKX var logListView : ListView = null def resume = {} def suspend = {} def shutdown(optional: Boolean) = { if ( window != null) { window.close true } false } def startup(display: Display, properties: Map[String, String]) = { val wtkxSerializer = new WTKXSerializer() var matchString : String = null /*浠巟ml(wtkx)鏂囦歡鍔犺澆GUI*/ window = wtkxSerializer.readObject(this,"MainWindow.xml").asInstanceOf[Window] wtkxSerializer.bind(this) if ( properties containsKey "logfile") { textInputFilePath setText ( properties get "logfile") } /*緇?Button娣誨姞浜嬩歡澶勭悊鍑芥暟*/ browsePushButton.getButtonPressListeners.add( function2Listener (browseButtonPressed ) ) loadPushButton.getButtonPressListeners.add( function2Listener(loadButtonPressed )) window.open(display) } /*嫻忚鎸夐挳浜嬩歡澶勭悊錛屾墦寮涓涓枃浠舵祻瑙堢獥鍙o紝璁╃敤鎴烽夋嫨鏂囦歡錛屽茍鍦ㄧ敤鎴峰叧闂璇濇鏃訛紝鎹曡幏鐢ㄦ埛閫夋嫨鐨勬枃浠跺悕*/ def browseButtonPressed( button : Button ) : Unit = { val dialog : FileBrowserSheet = new FileBrowserSheet(FileBrowserSheet.Mode.OPEN) dialog.open( window, new SheetCloseListener() { def sheetClosed(sheet: Sheet) = { if ( sheet.getResult) { val fileBrowseSheet = sheet.asInstanceOf[FileBrowserSheet] textInputFilePath.setText( fileBrowseSheet.getSelectedFile.getPath.toString) } } }) } /*浠巐og鏂囦歡鍔犺澆鍐呭錛屾瘡涓琛屾槸涓涓棩蹇楄褰? for涓嬌鐢ㄤ簡 if榪囨護鍣紝鍙湁鏉′歡絎﹀悎浜嗭紝鎵嶄細榪涘叆for寰幆浣撱? scala娌℃湁鎻愪緵continu錛岃屾槸鍦?for涓彁渚涗簡鏉′歡榪囨護鏉ユ浛浠? */ def loadButtonPressed( button : Button ) : Unit = { val logFile = Source.fromFile(textInputFilePath.getText) val list = new ArrayList[LogRecord] for ( line <- logFile.getLines ; logRecord = LogRecord(line.trim); if ( textInputThreadName.getText == "" || textInputThreadName.getText.contains(logRecord.threadName) ); if ( textInputModule.getText == "" || textInputModule.getText.contains(logRecord.module)); if ( textInputLevel.getText == "" || textInputLevel.getText.contains(logRecord.level))){ list add logRecord } logListView.setListData( list) } /*鎸夐挳浜嬩歡杈呭姪鎺ュ彛錛岀敤浜庢妸涓涓?浜嬩歡澶勭悊鍑芥暟杞崲涓築uttonPressListener瀵硅薄錛屼篃鍙互閲囧彇鏇撮珮綰х殑鍐呭錛屼嬌鐢╥mplicit,榪欓噷娌℃湁浣跨敤*/ def function2Listener( fun : Button => Unit ) :ButtonPressListener = { val listener = new ButtonPressListener() { def buttonPressed(button: Button) = { fun(button) } } listener } } /* 涓誨嚱鏁? 絎﹀悎Pivot涓誨嚱鏁板叆鍙h鍒? */ object LogAnalyse { def main ( args : Array[String]) : Unit = { DesktopApplicationContext.main( classOf[MainWindow], args) } }</pre> <p> run錛?/p> <p>浣跨敤 java鏃訛細</p> <p>java  -classpath scala-library.jar;pivot-core-1.5.jar;pivot-tools-1.5.jar;pivot-wtk-1.5.jar;pivot-wtk-terra-1.5.jar;. org.apache.pivot.scala.log.LogAnalyse </p> <p> </p> <p>浣跨敤 scala鏃?/p> <p>java  -classpath pivot-core-1.5.jar;pivot-tools-1.5.jar;pivot-wtk-1.5.jar;pivot-wtk-terra-1.5.jar;. org.apache.pivot.scala.log.LogAnalyse </p> </div> <img src ="http://m.tkk7.com/ivanwan/aggbug/341411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/ivanwan/" target="_blank">ivaneeo</a> 2010-12-23 20:37 <a href="http://m.tkk7.com/ivanwan/archive/2010/12/23/341411.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> 主站蜘蛛池模板: <a href="http://33dh2.com" target="_blank">猫咪免费人成在线网站</a>| <a href="http://shunfk.com" target="_blank">激情五月亚洲色图</a>| <a href="http://181xx.com" target="_blank">免费h视频在线观看</a>| <a href="http://meiluniao.com" target="_blank">亚洲美女aⅴ久久久91</a>| <a href="http://wangquanai.com" target="_blank">免费看的黄色大片</a>| <a href="http://ymtphoto.com" target="_blank">99re8这里有精品热视频免费</a>| <a href="http://6132423.com" target="_blank">亚洲综合激情视频</a>| <a href="http://yongyihongze.com" target="_blank">国产乱子影视频上线免费观看</a>| <a href="http://gg596gg.com" target="_blank">日韩免费高清播放器</a>| <a href="http://zbhongtai.com" target="_blank">国产人成亚洲第一网站在线播放</a>| <a href="http://wwwbi757.com" target="_blank">亚洲А∨精品天堂在线</a>| <a href="http://wwwee2.com" target="_blank">91久久精品国产免费直播</a>| <a href="http://chinacry.com" target="_blank">日本黄页网址在线看免费不卡</a>| <a href="http://7299jj.com" target="_blank">久久精品国产亚洲av水果派</a>| <a href="http://wwwzs88.com" target="_blank">免费观看国产精品</a>| <a href="http://quxx10.com" target="_blank">1000部拍拍拍18免费网站</a>| <a href="http://922eee.com" target="_blank">一边摸一边爽一边叫床免费视频</a>| <a href="http://www-36664.com" target="_blank">亚洲激情黄色小说</a>| <a href="http://888-28.com" target="_blank">激情97综合亚洲色婷婷五</a>| <a href="http://fshomppa.com" target="_blank">最近免费中文字幕4</a>| <a href="http://51comcomcom.com" target="_blank">a级毛片高清免费视频就</a>| <a href="http://mt181.com" target="_blank">综合一区自拍亚洲综合图区</a>| <a href="http://kaixininvestment.com" target="_blank">亚洲午夜精品一区二区</a>| <a href="http://yw762.com" target="_blank">国产精品xxxx国产喷水亚洲国产精品无码久久一区 </a>| <a href="http://bjycxy88.com" target="_blank">亚洲综合AV在线在线播放</a>| <a href="http://www678678.com" target="_blank">免费看国产精品3a黄的视频 </a>| <a href="http://amjt9.com" target="_blank">67194熟妇在线永久免费观看</a>| <a href="http://2266511.com" target="_blank">思思久久99热免费精品6</a>| <a href="http://pufenghotel.com" target="_blank">亚洲一区在线视频</a>| <a href="http://001mc.com" target="_blank">久久久久亚洲Av片无码v</a>| <a href="http://wwwst6.com" target="_blank">免费又黄又爽的视频</a>| <a href="http://carsmp.com" target="_blank">国产精品免费精品自在线观看</a>| <a href="http://xianzznn.com" target="_blank">成在人线av无码免费高潮水</a>| <a href="http://khushkhush.com" target="_blank">久久亚洲中文无码咪咪爱</a>| <a href="http://147v.com" target="_blank">亚洲午夜精品国产电影在线观看</a>| <a href="http://wo93xyz.com" target="_blank">中文字幕人成人乱码亚洲电影</a>| <a href="http://tlyyt.com" target="_blank">四虎国产精品免费视</a>| <a href="http://eee94.com" target="_blank">四虎影视www四虎免费</a>| <a href="http://91packing.com" target="_blank">亚洲成人免费电影</a>| <a href="http://kmc19.com" target="_blank">久久精品免费电影</a>| <a href="http://sese3366.com" target="_blank">一区二区三区视频免费观看</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>