??xml version="1.0" encoding="utf-8" standalone="yes"?>在线播放视频一区,wwwwww.欧美系列,精品视频123区在线观看http://www.aygfsteel.com/ivanwan/archive/2010/12/25/341536.htmlivaneeoivaneeoSat, 25 Dec 2010 15:15:00 GMThttp://www.aygfsteel.com/ivanwan/archive/2010/12/25/341536.htmlhttp://www.aygfsteel.com/ivanwan/comments/341536.htmlhttp://www.aygfsteel.com/ivanwan/archive/2010/12/25/341536.html#Feedback0http://www.aygfsteel.com/ivanwan/comments/commentRss/341536.htmlhttp://www.aygfsteel.com/ivanwan/services/trackbacks/341536.html阅读全文

ivaneeo 2010-12-25 23:15 发表评论
]]>
Interop Between Java and Scalahttp://www.aygfsteel.com/ivanwan/archive/2010/12/25/341534.htmlivaneeoivaneeoSat, 25 Dec 2010 15:08:00 GMThttp://www.aygfsteel.com/ivanwan/archive/2010/12/25/341534.htmlhttp://www.aygfsteel.com/ivanwan/comments/341534.htmlhttp://www.aygfsteel.com/ivanwan/archive/2010/12/25/341534.html#Feedback0http://www.aygfsteel.com/ivanwan/comments/commentRss/341534.htmlhttp://www.aygfsteel.com/ivanwan/services/trackbacks/341534.html阅读全文

ivaneeo 2010-12-25 23:08 发表评论
]]>
Unit意义http://www.aygfsteel.com/ivanwan/archive/2010/12/25/341511.htmlivaneeoivaneeoSat, 25 Dec 2010 02:59:00 GMThttp://www.aygfsteel.com/ivanwan/archive/2010/12/25/341511.htmlhttp://www.aygfsteel.com/ivanwan/comments/341511.htmlhttp://www.aygfsteel.com/ivanwan/archive/2010/12/25/341511.html#Feedback0http://www.aygfsteel.com/ivanwan/comments/commentRss/341511.htmlhttp://www.aygfsteel.com/ivanwan/services/trackbacks/341511.htmlUnit的结果类型指的是函数没有q回有用的倹{Scala的Unitcd比较接近Java的voidcdQ而且实际上Java里每一个返回void的方法都被映ؓScala里返回Unit的方?/strong>。因此结果类型ؓUnit的方法,仅仅是ؓ了它们的副作用而运行?

ivaneeo 2010-12-25 10:59 发表评论
]]>
Apache Pivot + Scala~写的一个小应用Q日志分?/title><link>http://www.aygfsteel.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.aygfsteel.com/ivanwan/archive/2010/12/23/341411.html</guid><wfw:comment>http://www.aygfsteel.com/ivanwan/comments/341411.html</wfw:comment><comments>http://www.aygfsteel.com/ivanwan/archive/2010/12/23/341411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ivanwan/comments/commentRss/341411.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ivanwan/services/trackbacks/341411.html</trackback:ping><description><![CDATA[<br /> <div id="wmqeeuq" class="blog_title"> <h3><a >Apache Pivot + Scala~写的一个小应用Q日志分?/a></h3> </div> <div id="wmqeeuq" class="blog_content"> <div id="wmqeeuq" class="dp-highlighter"> <div id="wmqeeuq" class="bar"> <div id="wmqeeuq" class="tools">Scala代码 </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>/*Z避免和scala.Application的名U冲H,q里修改了别?/  </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="wmqeeuq" class="number">2010</span><span>-</span><span id="wmqeeuq" class="number">8</span><span>-</span><span id="wmqeeuq" class="number">26</span><span>  </span></span></li> <li><span> * Time: <span id="wmqeeuq" class="number">10</span><span>:</span><span id="wmqeeuq" class="number">36</span><span>:</span><span id="wmqeeuq" 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标准生成的字D不使用getter/setter的格式,  </span></li> <li><span>    但是提供了注?nbsp;@scala.reflect.BeanProperty Q得编译器可以生成标准的JavaBean对象的getter/setter接口   </span></li> <li><span>    val 只生成了getter  </span></li> <li><span>    var 同时生成了getter和setter */  </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关键字是必须的,在java中用的是注?nbsp;@override,但是java中@overrideq不是必ȝ?nbsp; </span></li> <li><span>        省略?nbsp;函数q回|q译器q行cd推演得到  </span></li> <li><span>    */  </span></li> <li><span>  override def toString()  = {  </span></li> <li><span>    threadName +<span id="wmqeeuq" class="string">" "</span><span>+date +</span><span id="wmqeeuq" class="string">" "</span><span>+ time +</span><span id="wmqeeuq" class="string">" "</span><span>+module +</span><span id="wmqeeuq" class="string">" "</span><span>+level+</span><span id="wmqeeuq" 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 cȝ半生对象  </span></li> <li><span>    定义?nbsp;scala中的术接口 apply Q得可以?nbsp; LogRecord(<span id="wmqeeuq" class="string">"sting 文本"</span><span>) 可以创徏一个class LogRecord对象?nbsp; </span></span></li> <li><span>    applyҎ的调用由~译器自动调用,我们只负责定义即?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="wmqeeuq" class="number">08</span><span>/</span><span id="wmqeeuq" class="number">26</span><span>/</span><span id="wmqeeuq" class="number">10</span><span> </span><span id="wmqeeuq" class="number">10</span><span>:</span><span id="wmqeeuq" class="number">17</span><span>:</span><span id="wmqeeuq" class="number">17</span><span> LOGINFO     : INFO  - Debug level: </span><span id="wmqeeuq" class="number">2</span><span>  </span></span></li> <li><span>DVOSMAIN <span id="wmqeeuq" class="number">08</span><span>/</span><span id="wmqeeuq" class="number">26</span><span>/</span><span id="wmqeeuq" class="number">10</span><span> </span><span id="wmqeeuq" class="number">10</span><span>:</span><span id="wmqeeuq" class="number">17</span><span>:</span><span id="wmqeeuq" class="number">17</span><span> LOGINFO     : INFO  - *=ERROR WARNING EXCEPT  </span></span></li> <li><span>DVOSMAIN <span id="wmqeeuq" class="number">08</span><span>/</span><span id="wmqeeuq" class="number">26</span><span>/</span><span id="wmqeeuq" class="number">10</span><span> </span><span id="wmqeeuq" class="number">10</span><span>:</span><span id="wmqeeuq" class="number">17</span><span>:</span><span id="wmqeeuq" 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对象Q用于模式匹?/  </span></li> <li><span>    val logRegex = <span id="wmqeeuq" class="string">""</span><span id="wmqeeuq" class="string">"([A-Za-z0-9]+) +([0-9/]*) +([0-9:]*) +([A-Z]*) +: *([A-Z_]+).*"</span><span id="wmqeeuq" class="string">""</span><span>.r  </span></span></li> <li><span>  </span></li> <li><span>    line match {  </span></li> <li><span>        /*如果模式匚w成功QthreadName,date,time,module,level 分配按次序绑定到模式匚w表达式中()的内?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>            /*模式匚w通配W,在没有匹配到的情况下Q做通用处理。如果不dQ在匚w不到时会抛出 MatchError异常*/  </span></li> <li><span>      case _ =>  </span></li> <li><span>          val logRecord: LogRecord = new LogRecord(<span id="wmqeeuq" class="string">"N/A"</span><span>,</span><span id="wmqeeuq" class="string">"N/A"</span><span>,</span><span id="wmqeeuq" class="string">"N/A"</span><span>,</span><span id="wmqeeuq" class="string">"N/A"</span><span>,</span><span id="wmqeeuq" class="string">"N/A"</span><span>,</span><span id="wmqeeuq" 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>    重新定义了如何显C?nbsp;LogRecord对象?nbsp;列表目的渲染?nbsp; </span></li> <li><span>    如果使用默认的,那么ListView昄对象Ӟ直接调用对象的toString获得其字W串表示  </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>    定义ȝ口界面代?必须l承?nbsp;org.apache.pivot.Application  </span></li> <li><span>    使用?nbsp;@WTKX注解Q该注解属于 wtkx的命名对象的l定语法Q在从wtkx文g加蝲GUIӞ  </span></li> <li><span>    调用bind接口可以自动和wtkx文g中声明的wtkx:id对象q行l定Q无需在掉吗中调用 get(<span id="wmqeeuq" 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>        /*从xml(wtkx)文g加蝲GUI*/  </span></li> <li><span>    window = wtkxSerializer.readObject(this,<span id="wmqeeuq" 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="wmqeeuq" class="string">"logfile"</span><span>)  </span></span></li> <li><span>        {  </span></li> <li><span>                textInputFilePath setText ( properties get <span id="wmqeeuq" class="string">"logfile"</span><span>)  </span></span></li> <li><span>        }  </span></li> <li><span>          </span></li> <li><span>        /*l?nbsp;Buttond事g处理函数*/  </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>    /*览按钮事g处理Q打开一个文件浏览窗口,让用户选择文gQƈ在用户关闭对话框Ӟ捕获用户选择的文件名*/  </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>  /*从log文g加蝲内容Q每一行是一个日志记?nbsp; </span></li> <li><span>    for中用了 ifqo器,只有条gW合了,才会q入for循环体?nbsp; </span></li> <li><span>      </span></li> <li><span>    scala没有提供continuQ而是?nbsp;for中提供了条gqo来替?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="wmqeeuq" class="string">""</span><span> || textInputThreadName.getText.contains(logRecord.threadName) );  </span></span></li> <li><span>          if ( textInputModule.getText == <span id="wmqeeuq" class="string">""</span><span> || textInputModule.getText.contains(logRecord.module));  </span></span></li> <li><span>          if ( textInputLevel.getText == <span id="wmqeeuq" 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>    /*按钮事g辅助接口Q用于把一?nbsp;事g处理函数转换为ButtonPressListener对象Q也可以采取更高U的内容Q用implicit,q里没有使用*/  </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>    d?nbsp; </span></li> <li><span>    W合Pivotd数入口规?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} /*Z避免和scala.Application的名U冲H,q里修改了别?/ 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标准生成的字D不使用getter/setter的格式, 但是提供了注?@scala.reflect.BeanProperty Q得编译器可以生成标准的JavaBean对象的getter/setter接口 val 只生成了getter var 同时生成了getter和setter */ 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关键字是必须的,在java中用的是注?@override,但是java中@overrideq不是必ȝ? 省略?函数q回|q译器q行cd推演得到 */ override def toString() = { threadName +" "+date +" "+ time +" "+module +" "+level+" "+content } } /* LogRecord cȝ半生对象 定义?scala中的术接口 apply Q得可以? LogRecord("sting 文本") 可以创徏一个class LogRecord对象? applyҎ的调用由~译器自动调用,我们只负责定义即? 我们要解析的日志格式 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对象Q用于模式匹?/ val logRegex = """([A-Za-z0-9]+) +([0-9/]*) +([0-9:]*) +([A-Z]*) +: *([A-Z_]+).*""".r line match { /*如果模式匚w成功QthreadName,date,time,module,level 分配按次序绑定到模式匚w表达式中()的内?*/ case logRegex(threadName,date,time,module,level) => val logRecord: LogRecord = new LogRecord( threadName, date, time, module, level,line) logRecord /*模式匚w通配W,在没有匹配到的情况下Q做通用处理。如果不dQ在匚w不到时会抛出 MatchError异常*/ case _ => val logRecord: LogRecord = new LogRecord("N/A","N/A","N/A","N/A","N/A","N/A") logRecord } } } /* Apache Pivot ListView ItemRenderer 重新定义了如何显C?LogRecord对象?列表目的渲染? 如果使用默认的,那么ListView昄对象Ӟ直接调用对象的toString获得其字W串表示 */ 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) } } } /** 定义ȝ口界面代?必须l承?org.apache.pivot.Application 使用?@WTKX注解Q该注解属于 wtkx的命名对象的l定语法Q在从wtkx文g加蝲GUIӞ 调用bind接口可以自动和wtkx文g中声明的wtkx:id对象q行l定Q无需在掉吗中调用 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 /*从xml(wtkx)文g加蝲GUI*/ window = wtkxSerializer.readObject(this,"MainWindow.xml").asInstanceOf[Window] wtkxSerializer.bind(this) if ( properties containsKey "logfile") { textInputFilePath setText ( properties get "logfile") } /*l?Buttond事g处理函数*/ browsePushButton.getButtonPressListeners.add( function2Listener (browseButtonPressed ) ) loadPushButton.getButtonPressListeners.add( function2Listener(loadButtonPressed )) window.open(display) } /*览按钮事g处理Q打开一个文件浏览窗口,让用户选择文gQƈ在用户关闭对话框Ӟ捕获用户选择的文件名*/ 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) } } }) } /*从log文g加蝲内容Q每一行是一个日志记? for中用了 ifqo器,只有条gW合了,才会q入for循环体? scala没有提供continuQ而是?for中提供了条gqo来替? */ 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) } /*按钮事g辅助接口Q用于把一?事g处理函数转换为ButtonPressListener对象Q也可以采取更高U的内容Q用implicit,q里没有使用*/ def function2Listener( fun : Button => Unit ) :ButtonPressListener = { val listener = new ButtonPressListener() { def buttonPressed(button: Button) = { fun(button) } } listener } } /* d? W合Pivotd数入口规? */ object LogAnalyse { def main ( args : Array[String]) : Unit = { DesktopApplicationContext.main( classOf[MainWindow], args) } }</pre> <p> runQ?/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://www.aygfsteel.com/ivanwan/aggbug/341411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ivanwan/" target="_blank">ivaneeo</a> 2010-12-23 20:37 <a href="http://www.aygfsteel.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"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͩ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˰</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank">̳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">˫Ѽɽ</a>| <a href="http://" target="_blank">⳵</a>| <a href="http://" target="_blank">Ӣ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank">ȫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ں</a>| <a href="http://" target="_blank">ֶ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">౱</a>| <a href="http://" target="_blank">书</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʲ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" 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>