锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧洲校园自拍都市,亚洲一区二区三区高清,国产亚洲av人片在线观看http://www.tkk7.com/ivanwan/archive/2010/12/25/341536.htmlivaneeoivaneeoSat, 25 Dec 2010 15:15:00 GMThttp://www.tkk7.com/ivanwan/archive/2010/12/25/341536.htmlhttp://www.tkk7.com/ivanwan/comments/341536.htmlhttp://www.tkk7.com/ivanwan/archive/2010/12/25/341536.html#Feedback0http://www.tkk7.com/ivanwan/comments/commentRss/341536.htmlhttp://www.tkk7.com/ivanwan/services/trackbacks/341536.html闃呰鍏ㄦ枃

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

ivaneeo 2010-12-25 23:08 鍙戣〃璇勮
]]>
Unit鎰忎箟http://www.tkk7.com/ivanwan/archive/2010/12/25/341511.htmlivaneeoivaneeoSat, 25 Dec 2010 02:59:00 GMThttp://www.tkk7.com/ivanwan/archive/2010/12/25/341511.htmlhttp://www.tkk7.com/ivanwan/comments/341511.htmlhttp://www.tkk7.com/ivanwan/archive/2010/12/25/341511.html#Feedback0http://www.tkk7.com/ivanwan/comments/commentRss/341511.htmlhttp://www.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://www.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://www.tkk7.com/ivanwan/archive/2010/12/23/341411.html</guid><wfw:comment>http://www.tkk7.com/ivanwan/comments/341411.html</wfw:comment><comments>http://www.tkk7.com/ivanwan/archive/2010/12/23/341411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/ivanwan/comments/commentRss/341411.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/ivanwan/services/trackbacks/341411.html</trackback:ping><description><![CDATA[<br /> <div id="j3rxd39" class="blog_title"> <h3><a >Apache Pivot + Scala緙栧啓鐨勪竴涓皬搴旂敤錛氭棩蹇楀垎鏋?/a></h3> </div> <div id="bld9x33" class="blog_content"> <div id="vhzh931" class="dp-highlighter"> <div id="vntrn99" class="bar"> <div id="vfh9ttv" 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="1fj999r" class="number">2010</span><span>-</span><span id="nxh9xj9" class="number">8</span><span>-</span><span id="hzlzzvt" class="number">26</span><span>  </span></span></li> <li><span> * Time: <span id="nv3b9n9" class="number">10</span><span>:</span><span id="xf99jrh" class="number">36</span><span>:</span><span id="z9l9rfv" 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="3ht3pnt" class="string">" "</span><span>+date +</span><span id="1199ndt" class="string">" "</span><span>+ time +</span><span id="13r9xvd" class="string">" "</span><span>+module +</span><span id="139bzf9" class="string">" "</span><span>+level+</span><span id="11b9fn9" 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="vhj99b9" 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="fn3jl9z" class="number">08</span><span>/</span><span id="hfz3z39" class="number">26</span><span>/</span><span id="hh3999f" class="number">10</span><span> </span><span id="f39n9n9" class="number">10</span><span>:</span><span id="33tr99h" class="number">17</span><span>:</span><span id="vf9hj9n" class="number">17</span><span> LOGINFO     : INFO  - Debug level: </span><span id="t3znxrx" class="number">2</span><span>  </span></span></li> <li><span>DVOSMAIN <span id="t99htrx" class="number">08</span><span>/</span><span id="vtnbltr" class="number">26</span><span>/</span><span id="9b999pz" class="number">10</span><span> </span><span id="399n9l9" class="number">10</span><span>:</span><span id="zxb39dn" class="number">17</span><span>:</span><span id="fl3v999" class="number">17</span><span> LOGINFO     : INFO  - *=ERROR WARNING EXCEPT  </span></span></li> <li><span>DVOSMAIN <span id="9bzn99z" class="number">08</span><span>/</span><span id="39ft9zr" class="number">26</span><span>/</span><span id="3bfbnlz" class="number">10</span><span> </span><span id="9fpdhnl" class="number">10</span><span>:</span><span id="db339fx" class="number">17</span><span>:</span><span id="r9jx9dj" 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="3zbhzx9" class="string">""</span><span id="zn399rf" class="string">"([A-Za-z0-9]+) +([0-9/]*) +([0-9:]*) +([A-Z]*) +: *([A-Z_]+).*"</span><span id="3b9v3j9" 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>            /*妯″紡鍖歸厤閫氶厤絎︼紝鍦ㄦ病鏈夊尮閰嶅埌鐨勬儏鍐典笅錛屽仛閫氱敤澶勭悊銆傚鏋滀笉娣誨姞錛屽湪鍖歸厤涓嶅埌鏃朵細(xì)鎶涘嚭 MatchError寮傚父*/  </span></li> <li><span>      case _ =>  </span></li> <li><span>          val logRecord: LogRecord = new LogRecord(<span id="hxn1bhv" class="string">"N/A"</span><span>,</span><span id="hnhvp9z" class="string">"N/A"</span><span>,</span><span id="3prbd99" class="string">"N/A"</span><span>,</span><span id="f339p99" class="string">"N/A"</span><span>,</span><span id="3f9p9zh" class="string">"N/A"</span><span>,</span><span id="hfj3993" 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="pdp39bz" 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="3z9tpfb" 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="v3tfff9" class="string">"logfile"</span><span>)  </span></span></li> <li><span>        {  </span></li> <li><span>                textInputFilePath setText ( properties get <span id="ntv3x3d" 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榪囨護(hù)鍣紝鍙湁鏉′歡絎﹀悎浜嗭紝鎵嶄細(xì)榪涘叆for寰幆浣撱?nbsp; </span></li> <li><span>      </span></li> <li><span>    scala娌℃湁鎻愪緵continu錛岃屾槸鍦?nbsp;for涓彁渚涗簡鏉′歡榪囨護(hù)鏉ユ浛浠?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="ndnt99n" class="string">""</span><span> || textInputThreadName.getText.contains(logRecord.threadName) );  </span></span></li> <li><span>          if ( textInputModule.getText == <span id="l999dtr" class="string">""</span><span> || textInputModule.getText.contains(logRecord.module));  </span></span></li> <li><span>          if ( textInputLevel.getText == <span id="fldbn3j" 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 /*妯″紡鍖歸厤閫氶厤絎︼紝鍦ㄦ病鏈夊尮閰嶅埌鐨勬儏鍐典笅錛屽仛閫氱敤澶勭悊銆傚鏋滀笉娣誨姞錛屽湪鍖歸厤涓嶅埌鏃朵細(xì)鎶涘嚭 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榪囨護(hù)鍣紝鍙湁鏉′歡絎﹀悎浜嗭紝鎵嶄細(xì)榪涘叆for寰幆浣撱? scala娌℃湁鎻愪緵continu錛岃屾槸鍦?for涓彁渚涗簡鏉′歡榪囨護(hù)鏉ユ浛浠? */ 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鏃訛細(xì)</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://www.tkk7.com/ivanwan/aggbug/341411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/ivanwan/" target="_blank">ivaneeo</a> 2010-12-23 20:37 <a href="http://www.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://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> 主站蜘蛛池模板: <a href="http://www97544.com" target="_blank">性无码免费一区二区三区在线</a>| <a href="http://gzmcmy.com" target="_blank">最新黄色免费网站</a>| <a href="http://wwwhaole10.com" target="_blank">亚洲va在线va天堂va888www</a>| <a href="http://chinahongfeng.com" target="_blank">久久精品免费视频观看</a>| <a href="http://xuanzhicity.com" target="_blank">在线综合亚洲中文精品</a>| <a href="http://szhszszy.com" target="_blank">亚洲成a人片在线观看日本麻豆</a>| <a href="http://118762.com" target="_blank">九九精品成人免费国产片</a>| <a href="http://181xx.com" target="_blank">国产 亚洲 中文在线 字幕</a>| <a href="http://www9797nn.com" target="_blank">亚洲人成网站在线观看青青</a>| <a href="http://tzntrip.com" target="_blank">十八禁无码免费网站 </a>| <a href="http://ttays.com" target="_blank">亚洲av成人一区二区三区观看在线 </a>| <a href="http://2886868.com" target="_blank">东北美女野外bbwbbw免费</a>| <a href="http://cao9999.com" target="_blank">亚洲色图综合网站</a>| <a href="http://www-yhty.com" target="_blank">亚洲AV成人精品日韩一区18p</a>| <a href="http://www-959kj.com" target="_blank">性xxxxx大片免费视频</a>| <a href="http://5656ys.com" target="_blank">校园亚洲春色另类小说合集</a>| <a href="http://d3q4.com" target="_blank">亚洲精品中文字幕乱码</a>| <a href="http://9522952.com" target="_blank">亚洲电影日韩精品</a>| <a href="http://gylscm.com" target="_blank">99在线视频免费观看视频</a>| <a href="http://818812.com" target="_blank">黄色网址免费在线观看</a>| <a href="http://www91pao.com" target="_blank">成人区精品一区二区不卡亚洲</a>| <a href="http://fshomppa.com" target="_blank">亚洲一区爱区精品无码</a>| <a href="http://k96d.com" target="_blank">精品免费国产一区二区</a>| <a href="http://zgxxx.com" target="_blank">99re6在线精品视频免费播放</a>| <a href="http://meinvtaotu.com" target="_blank">在线观看亚洲免费视频</a>| <a href="http://51ruilon.com" target="_blank">亚洲欧洲免费视频</a>| <a href="http://68996500.com" target="_blank">亚洲精品无码专区2</a>| <a href="http://0827fang.com" target="_blank">97无码免费人妻超级碰碰碰碰</a>| <a href="http://3baimm.com" target="_blank">十八禁视频在线观看免费无码无遮挡骂过</a>| <a href="http://8888kkk.com" target="_blank">久久亚洲国产最新网站</a>| <a href="http://kdp44.com" target="_blank">亚洲网红精品大秀在线观看</a>| <a href="http://v1s3u5.com" target="_blank">国产91精品一区二区麻豆亚洲</a>| <a href="http://https357171.com" target="_blank">午夜成年女人毛片免费观看</a>| <a href="http://vo168.com" target="_blank">亚洲美女视频免费</a>| <a href="http://wwwjjz.com" target="_blank">精品亚洲永久免费精品 </a>| <a href="http://rr433.com" target="_blank">一级毛片在线完整免费观看</a>| <a href="http://bcz123.com" target="_blank">国产精品亚洲精品观看不卡</a>| <a href="http://xieehuomh.com" target="_blank">亚洲av最新在线网址</a>| <a href="http://mp4888.com" target="_blank">奇米影视亚洲春色</a>| <a href="http://shenghe228.com" target="_blank">免费看一级做a爰片久久</a>| <a href="http://shandonghj.com" target="_blank">卡1卡2卡3卡4卡5免费视频</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>