﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-xmlspy</title><link>http://www.blogjava.net/xmlspy/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 02 May 2026 08:50:03 GMT</lastBuildDate><pubDate>Sat, 02 May 2026 08:50:03 GMT</pubDate><ttl>60</ttl><item><title>nodejs eclipse,在运行后没有效果</title><link>http://www.blogjava.net/xmlspy/archive/2014/04/25/412905.html</link><dc:creator>xmlspy</dc:creator><author>xmlspy</author><pubDate>Thu, 24 Apr 2014 19:52:00 GMT</pubDate><guid>http://www.blogjava.net/xmlspy/archive/2014/04/25/412905.html</guid><wfw:comment>http://www.blogjava.net/xmlspy/comments/412905.html</wfw:comment><comments>http://www.blogjava.net/xmlspy/archive/2014/04/25/412905.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xmlspy/comments/commentRss/412905.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xmlspy/services/trackbacks/412905.html</trackback:ping><description><![CDATA[<p>使用eclipse的nodejs的插件,右键运行app.js,控制台一闪而过,没有启动起来.</p> <p>通过搜索,发现原来是JDK版本的问题,我用的是JDK6,不好使,使用JDK7就好使了.</p> <p>如果有多个JDK版本共存,可以使用在eclipse安装目录下的文件eclipse.ini指定要使用的JDK:</p> <p>-vm<br>C:/Program Files/Java/jdk1.7.0_55/bin/javaw.exe</p><img src ="http://www.blogjava.net/xmlspy/aggbug/412905.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xmlspy/" target="_blank">xmlspy</a> 2014-04-25 03:52 <a href="http://www.blogjava.net/xmlspy/archive/2014/04/25/412905.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的Eclipse设置</title><link>http://www.blogjava.net/xmlspy/archive/2013/11/17/406435.html</link><dc:creator>xmlspy</dc:creator><author>xmlspy</author><pubDate>Sun, 17 Nov 2013 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/xmlspy/archive/2013/11/17/406435.html</guid><wfw:comment>http://www.blogjava.net/xmlspy/comments/406435.html</wfw:comment><comments>http://www.blogjava.net/xmlspy/archive/2013/11/17/406435.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xmlspy/comments/commentRss/406435.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xmlspy/services/trackbacks/406435.html</trackback:ping><description><![CDATA[<p>很多人在安装完Eclipse之后什么都不设置，直接用默认的设置，默认的设置有很多问题。<br>在项目管理中应该统一Eclipse的设置。</p> <p>通过菜单Window-&gt;Preferences打开设置窗口。</p> <ul> <li><strong>General-&gt;Editors-&gt;Text Editors:</strong><br>选上Insert spaces for tabs : 缩进使用空格,不使用Tab.原因是当把代码复制给网络上的显示的时候,<br>Tab经常会被删除,导致格式完全乱套.<br>选上Show line numbers : 显示行号,这个在debug的时候快速定位非常方便.<br>选上Show print margin,然后在下面的Print margin column输入框中输入120 : 显示一条竖线,<br>用于标示打印机打印时的宽度.这里用于代码自动换行的宽度. 设置为120个字符.这个同样在Java<br>代码格式化的时候用到,后继会说到.<br><a href="http://www.blogjava.net/images/blogjava_net/xmlspy/Windows-Live-Writer/99ccd53365ce_D03E/Y3RDP4%60%60Q@%5D%5B2%5DJX%5D3DYVA7%5B4%5D.jpg"><img title="Y3RDP4``Q@][2]JX]3DYVA7[4]" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Y3RDP4``Q@][2]JX]3DYVA7[4]" src="http://www.blogjava.net/images/blogjava_net/xmlspy/Windows-Live-Writer/99ccd53365ce_D03E/Y3RDP4%60%60Q@%5D%5B2%5DJX%5D3DYVA7%5B4%5D_thumb.jpg" width="410" height="728"></a><br> <li><strong>General-&gt;Workspace</strong><br>在Text file encoding中选择Other,然后在下拉框中选UTF-8 : 这样所有项目都是用UTF-8编码.默认的是GBK.<br> <li><strong>Java-&gt;Code Style-&gt;Formatter</strong><br>这里是Java代码格式化相关的选项, 要修改默认的设置,需要新建一个配置.<br><br>点击按钮 New… 在弹出框中的 Profile name 输入框输入新配置的名称,这里输入 11, 然后点击OK按钮.<br>在新弹出的配置窗口中,选择标签Indentation, 在Tab policy下拉框中选择 Spaces only : 缩进使用空格.<br>这里需要注意,如果在General-&gt;Editors-&gt;Text Editors中选择了Insert spaces for tabs, 而在格式化选项中<br>没有改成使用空格,那么在Java代码格式化后,仍然使用Tab.<br><br>选择标签 Line Wrapping,在Maximum line width输入框输入120 : 在120个字符后换行, 上面的 Print margin column<br>也用的120,这样就知道换行的标示了.<br></li></ul> <p>其他如果有Editor的地方,缩进也都要改成4个空格. 比如: Web节点下面的CSS Files, HTML Files.</p><img src ="http://www.blogjava.net/xmlspy/aggbug/406435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xmlspy/" target="_blank">xmlspy</a> 2013-11-17 15:32 <a href="http://www.blogjava.net/xmlspy/archive/2013/11/17/406435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Windows Live Writer写Blog</title><link>http://www.blogjava.net/xmlspy/archive/2013/10/02/404674.html</link><dc:creator>xmlspy</dc:creator><author>xmlspy</author><pubDate>Wed, 02 Oct 2013 14:46:00 GMT</pubDate><guid>http://www.blogjava.net/xmlspy/archive/2013/10/02/404674.html</guid><wfw:comment>http://www.blogjava.net/xmlspy/comments/404674.html</wfw:comment><comments>http://www.blogjava.net/xmlspy/archive/2013/10/02/404674.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xmlspy/comments/commentRss/404674.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xmlspy/services/trackbacks/404674.html</trackback:ping><description><![CDATA[<p>使用这个东西的好处是,可以发布到多个Blog上,免得使用Web编辑器苦逼地编辑.</p> <p>下载地址: <a title="http://windows.microsoft.com/zh-cn/windows-live/essentials-other#essentials=overviewother" href="http://windows.microsoft.com/zh-cn/windows-live/essentials-other#essentials=overviewother">http://windows.microsoft.com/zh-cn/windows-live/essentials-other#essentials=overviewother</a></p> <p>* 使用Live Writer在<strong>oschina</strong>上写Blog: <a title="http://my.oschina.net/javayou/blog/39107" href="http://my.oschina.net/javayou/blog/39107">http://my.oschina.net/javayou/blog/39107</a></p> <p>* 使用Live Writer在BlogJava上鞋Blog: <a title="http://www.blogjava.net/vulcan/archive/2010/11/05/337323.html" href="http://www.blogjava.net/vulcan/archive/2010/11/05/337323.html">http://www.blogjava.net/vulcan/archive/2010/11/05/337323.html</a></p> <blockquote> <p>注意:&nbsp; - 在日志类型中选择Metaweblog API</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - API连接为: <a title="http://www.blogjava.net/jixin/services/metaweblog.aspx" href="http://www.blogjava.net/你的blog名称/services/metaweblog.aspx">http://www.blogjava.net/<strong>你的blog名称</strong>/services/metaweblog.aspx</a></p></blockquote><img src ="http://www.blogjava.net/xmlspy/aggbug/404674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xmlspy/" target="_blank">xmlspy</a> 2013-10-02 22:46 <a href="http://www.blogjava.net/xmlspy/archive/2013/10/02/404674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Titanium -- 运行app出现错误: TypeError: argument of type 'NoneType' is not iterable</title><link>http://www.blogjava.net/xmlspy/archive/2013/05/31/400007.html</link><dc:creator>xmlspy</dc:creator><author>xmlspy</author><pubDate>Fri, 31 May 2013 01:05:00 GMT</pubDate><guid>http://www.blogjava.net/xmlspy/archive/2013/05/31/400007.html</guid><wfw:comment>http://www.blogjava.net/xmlspy/comments/400007.html</wfw:comment><comments>http://www.blogjava.net/xmlspy/archive/2013/05/31/400007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xmlspy/comments/commentRss/400007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xmlspy/services/trackbacks/400007.html</trackback:ping><description><![CDATA[<p>更新了最新Android ADT工具后,出现 TypeError: argument of type 'NoneType' is not iterable.</p> <p><a href="http://www.blogjava.net/images/blogjava_net/xmlspy/Windows-Live-Writer/e6a54303e91e_7E5C/O%7BJ4%25Z8HX%5BDQ%25ORWFHNWGUC_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="O{J4%Z8HX[DQ%ORWFHNWGUC" border="0" alt="O{J4%Z8HX[DQ%ORWFHNWGUC" src="http://www.blogjava.net/images/blogjava_net/xmlspy/Windows-Live-Writer/e6a54303e91e_7E5C/O%7BJ4%25Z8HX%5BDQ%25ORWFHNWGUC_thumb.jpg" width="641" height="341"></a></p> <p>解决:</p> <p>&nbsp;&nbsp;&nbsp; 复制 build-tool/17.0.0/ 下所有内容到 platform-tools 目录下.</p> <p>参考:</p> <p><a title="https://developer.appcelerator.com/question/152497/titanium-sdk-310-error-typeerror-argument-of-type-nonetype-is-not-iterable-on-building-android-app" href="https://developer.appcelerator.com/question/152497/titanium-sdk-310-error-typeerror-argument-of-type-nonetype-is-not-iterable-on-building-android-app">https://developer.appcelerator.com/question/152497/titanium-sdk-310-error-typeerror-argument-of-type-nonetype-is-not-iterable-on-building-android-app</a></p><img src ="http://www.blogjava.net/xmlspy/aggbug/400007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xmlspy/" target="_blank">xmlspy</a> 2013-05-31 09:05 <a href="http://www.blogjava.net/xmlspy/archive/2013/05/31/400007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Titanium Terminal 不好使的解决办法</title><link>http://www.blogjava.net/xmlspy/archive/2013/05/30/399992.html</link><dc:creator>xmlspy</dc:creator><author>xmlspy</author><pubDate>Thu, 30 May 2013 11:33:00 GMT</pubDate><guid>http://www.blogjava.net/xmlspy/archive/2013/05/30/399992.html</guid><wfw:comment>http://www.blogjava.net/xmlspy/comments/399992.html</wfw:comment><comments>http://www.blogjava.net/xmlspy/archive/2013/05/30/399992.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xmlspy/comments/commentRss/399992.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xmlspy/services/trackbacks/399992.html</trackback:ping><description><![CDATA[<p>有时候Titanium中的终端会显示:</p><pre class="csharpcode">This Terminal Emulator <span class="kwrd">is</span> not functional because no <span class="str">'bash'</span> shell could be found.

Please correct the problem and restart the IDE.</pre>
<p>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
</p>
<p>解决办法:</p>
<ul>
<li>Team / Git / Git Executable (was empty)&nbsp;&nbsp; --指定正确的git.exe文件位置 
<li>Titanium Studio / NodeJS / Node Executable (was empty also) ---- 指定NodeJS的node.exe的位置</li></ul>
<p>&nbsp;</p>
<p>然后重启终端就好了.</p><img src ="http://www.blogjava.net/xmlspy/aggbug/399992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xmlspy/" target="_blank">xmlspy</a> 2013-05-30 19:33 <a href="http://www.blogjava.net/xmlspy/archive/2013/05/30/399992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebView控件中的onConsoleMessage方法不被调用</title><link>http://www.blogjava.net/xmlspy/archive/2013/04/28/398522.html</link><dc:creator>xmlspy</dc:creator><author>xmlspy</author><pubDate>Sat, 27 Apr 2013 17:46:00 GMT</pubDate><guid>http://www.blogjava.net/xmlspy/archive/2013/04/28/398522.html</guid><wfw:comment>http://www.blogjava.net/xmlspy/comments/398522.html</wfw:comment><comments>http://www.blogjava.net/xmlspy/archive/2013/04/28/398522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xmlspy/comments/commentRss/398522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xmlspy/services/trackbacks/398522.html</trackback:ping><description><![CDATA[<h2>1.目的</h2> <p>在WebView控件中,如果页面中调用了javascript脚本console.log 方法,就调用一个Java方法.</p> <p>&nbsp;</p> <h2>2.默认实现方法</h2> <p>在Android的WebView控件中,有一个setChromeClient(WebChromeClient)方法,</p> <p>此方法的参数是WebChromeClient对象,通过重载此对象中的onConsoleMessage方法就</p> <p>可以达到此目的.看代码:</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:a12d7b19-4be6-47b5-bd1f-1fe01844ca2f" class="wlWriterEditableSmartContent"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4;  toolbar: true;  ruler: true; width: 846px; height: 520px;" style=" width: 846px; height: 520px;overflow: auto;">WebView webView = new WebView();
webView.setWebChromeClient(new DefaultWebChromeClient);

// 以上代码放在在Activity或则Fragment中的onCreate方法中

private class DefualtWebChromeClient extends WebChromeClient {
    @Override
    public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
        String message = consoleMessage.message();
        int lineNumber = consoleMessage.lineNumber();
        String sourceID = consoleMessage.sourceId();
        String messageLevel = consoleMessage.message();

        Log.i(&quot;[WebView]&quot;, String.format(&quot;[%s] sourceID: %s lineNumber: %n message: %s&quot;,
                messageLevel, sourceID, lineNumber, message));

        return super.onConsoleMessage(consoleMessage);
    }

    @Override
    public void onConsoleMessage(String message, int lineNumber, String sourceID) {
        Log.i(&quot;[WebView]&quot;, String.format(&quot;sourceID: %s lineNumber: %n message: %s&quot;, sourceID,
                lineNumber, message));
        super.onConsoleMessage(message, lineNumber, sourceID);
    }
}</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p>第一个方法onConsoleMessage(ConsoleMessage consoleMessage)是新版本的android才有的方法,第二个方法是旧版本的.</p>
<p>第二个方法已经不推荐使用了,但是在旧版本的android中,仍然需要此方法.所以最好两个方法都实现.</p>
<p>&nbsp;</p>
<h2>3.问题</h2>
<p>默认的实现在某些版本的手机中不好使,onConsoleMessage方法死活不被调用</p>
<p>&nbsp;</p>
<h2>4.解决方案</h2>
<p>使用WebView的addJavascriptInterface方法:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:809c6614-7e1d-4fc4-acd9-e116759821fd" class="wlWriterEditableSmartContent"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4;  toolbar: true;  width: 846px; height: 267px;" style=" width: 846px; height: 267px;overflow: auto;">// 首先,定一个类,叫什么名称都可以,但是里面的方法名必须与
// Javascript的console中的方法名对应
private class Console{
    private static final String TAG=&quot;[WebView]&quot;;
    public void log(String msg){
        Log.i(TAG,msg);
    }
	// 还可以添加其他的方法,比如: warn,assert等等
}

// 然后,为WebView添加对应的接口
webView.addJavascriptInterface(new Console, &quot;console&quot;);</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p>&nbsp;</p>
<p>这个解决方案有一个不好的地方,就是输出的内容没有onConsoleMessage方法那么详细,比如行号,就没法输出.</p>
<p>所以,我们应该在onConsoleMessage好使的时候使用onConsoleMessage,不好使的时候在使用我们自定义的方式.</p>
<p>那么,如何来判断onConsoleMessage是否好使呢? 我们可以在程序初始化的时候,先在WebView中运行一下console.log,</p>
<p>如果onConsoleMessage运行了,就添加一个标记,表示默认的实现是好使的.</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:cfd39647-c924-407a-931a-133409566d6f" class="wlWriterEditableSmartContent"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4;  toolbar: true;  width: 851px; height: 1470px;" style=" width: 851px; height: 1470px;overflow: auto;">@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // 这些代码也可以放到onCreate方法中
	
    this.webView = (WebView) layout.findViewById(R.id.webview);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    
    // Set WebChromeClient
    WebChromeClient webChromeClient = new TestConsoleMessageWebChromeClient();
	// 先执行console.log,测试是否调用了onConsoleMessage
    webView.loadUrl(&quot;javascript:console.log('testConsoleMessage')&quot;);
	
    if (((TestConsoleMessageWebChromeClient)webChromeClient).isConsoleMessageOK()){
	    // 这里额外使用了一个新的类 TestConsoleMessageWebChromeClient
		// 如果不适用TestConsoleMessageWebChromeClient,就需要在
		// DefaultWebChromeClient中添加标记字段 consoleMessageOK,
		// 这样如果方法onConsoleMessage好使,那么每次都给consoleMessageOK赋值,
		// 这个有些多余,也影响性能.
        webChromeClient = new DefualtWebChromeClient();
    }else{
	    // onConsoleMessage不好使,就使用这种方式,第二个参数值必须是&quot;console&quot;
        webView.addJavascriptInterface(new Console(), &quot;console&quot;);
    }
    
    webView.loadUrl(&quot;http://www.baidu.com&quot;);

    return super.onCreateView(inflater, container, savedInstanceState);
}

// 当默认的onConsoleMessage不好使的时候使用的类
private class Console {
    private static final String TAG = &quot;[WebView]&quot;;

    public void log(String msg) {
        Log.i(TAG, msg);
    }
	// 这里还可以添加其他方法console对象中有的方法,比如 assert
}

// 默认
private class DefualtWebChromeClient extends WebChromeClient {
    @Override
    public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
        String message = consoleMessage.message();
        int lineNumber = consoleMessage.lineNumber();
        String sourceID = consoleMessage.sourceId();
        String messageLevel = consoleMessage.message();

        Log.i(&quot;[WebView]&quot;, String.format(&quot;[%s] sourceID: %s lineNumber: %n message: %s&quot;,
                messageLevel, sourceID, lineNumber, message));

        return super.onConsoleMessage(consoleMessage);
    }

    @Override
    public void onConsoleMessage(String message, int lineNumber, String sourceID) {
        Log.i(&quot;[WebView]&quot;, String.format(&quot;sourceID: %s lineNumber: %n message: %s&quot;, sourceID,
                lineNumber, message));
        super.onConsoleMessage(message, lineNumber, sourceID);
    }
}

// 用于测试onConsoleMessage是否调用的类
private class TestConsoleMessageWebChromeClient extends WebChromeClient {
    private boolean consoleMessageOK = false;

    @Override
    public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
        this.consoleMessageOK = true;
        return super.onConsoleMessage(consoleMessage);
    }

    @Override
    public void onConsoleMessage(String message, int lineNumber, String sourceID) {
        this.consoleMessageOK = true;
        super.onConsoleMessage(message, lineNumber, sourceID);
    }

    public boolean isConsoleMessageOK() {
        return this.consoleMessageOK;
    }
}
</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div><img src ="http://www.blogjava.net/xmlspy/aggbug/398522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xmlspy/" target="_blank">xmlspy</a> 2013-04-28 01:46 <a href="http://www.blogjava.net/xmlspy/archive/2013/04/28/398522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript技巧</title><link>http://www.blogjava.net/xmlspy/archive/2013/04/01/397209.html</link><dc:creator>xmlspy</dc:creator><author>xmlspy</author><pubDate>Sun, 31 Mar 2013 22:57:00 GMT</pubDate><guid>http://www.blogjava.net/xmlspy/archive/2013/04/01/397209.html</guid><wfw:comment>http://www.blogjava.net/xmlspy/comments/397209.html</wfw:comment><comments>http://www.blogjava.net/xmlspy/archive/2013/04/01/397209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xmlspy/comments/commentRss/397209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xmlspy/services/trackbacks/397209.html</trackback:ping><description><![CDATA[<h1>匿名立即执行函数</h1> <div class="csharpcode"><pre><span class="lnum">   1:  </span><span class="rem">// 方式一,这种方式多用了一个括号,看着别扭</span></pre><pre><span class="lnum">   2:  </span>(function(param) {</pre><pre><span class="lnum">   3:  </span>    alert(param);</pre><pre><span class="lnum">   4:  </span>})(10);</pre><pre><span class="lnum">   5:  </span>&nbsp;</pre><pre><span class="lnum">   6:  </span><span class="rem">// 方式二,使用 ! 操作符</span></pre><pre><span class="lnum">   7:  </span>!function(param) {</pre><pre><span class="lnum">   8:  </span>    alert(param);</pre><pre><span class="lnum">   9:  </span>}(10);</pre></div>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>

<p>使用匿名立即执行函数的好处是,可以避免变量冲突.</p>
<h1>条件判断</h1>
<div class="csharpcode"><pre><span class="lnum">   1:  </span><span class="rem">//========================= 条件判断</span></pre><pre><span class="lnum">   2:  </span><span class="kwrd">var</span> sabiable = <span class="kwrd">true</span>;</pre><pre><span class="lnum">   3:  </span><span class="rem">//普通方式</span></pre><pre><span class="lnum">   4:  </span><span class="kwrd">if</span> (sabiable) {</pre><pre><span class="lnum">   5:  </span>    alert(<span class="str">'You are sability!'</span>);</pre><pre><span class="lnum">   6:  </span>}</pre><pre><span class="lnum">   7:  </span>&nbsp;</pre><pre><span class="lnum">   8:  </span><span class="rem">//诡异方式,利用 ||和 &amp;&amp; 操作符</span></pre><pre><span class="lnum">   9:  </span><span class="rem">// a||b : 只有在a为fasle或者返回false时才会执行b,当a为true时,直接返回a,后面的b不会执行</span></pre><pre><span class="lnum">  10:  </span><span class="rem">// a&amp;&amp;b : 只有在a为true或者返回true时才会执行b,当a为时,直接返回a,后面的b不会执行</span></pre><pre><span class="lnum">  11:  </span>&nbsp;</pre><pre><span class="lnum">  12:  </span><span class="rem">// 上面的代码可以改为:</span></pre><pre><span class="lnum">  13:  </span>sabiable &amp;&amp; alert(<span class="str">'You are sability!'</span>);</pre></div>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style><img src ="http://www.blogjava.net/xmlspy/aggbug/397209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xmlspy/" target="_blank">xmlspy</a> 2013-04-01 06:57 <a href="http://www.blogjava.net/xmlspy/archive/2013/04/01/397209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决Titanium Tab组件click事件在iOS中不生效的方案</title><link>http://www.blogjava.net/xmlspy/archive/2013/03/31/397186.html</link><dc:creator>xmlspy</dc:creator><author>xmlspy</author><pubDate>Sat, 30 Mar 2013 18:54:00 GMT</pubDate><guid>http://www.blogjava.net/xmlspy/archive/2013/03/31/397186.html</guid><wfw:comment>http://www.blogjava.net/xmlspy/comments/397186.html</wfw:comment><comments>http://www.blogjava.net/xmlspy/archive/2013/03/31/397186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xmlspy/comments/commentRss/397186.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xmlspy/services/trackbacks/397186.html</trackback:ping><description><![CDATA[<p>问题: 以下代码,tab1的click事件在Android中生效,在iOS不生效</p> <div class="csharpcode"><pre class="alt"><span class="lnum">   1:  </span><span class="kwrd">function</span> ApplicationTabGroup(Window) {</pre><pre><span class="lnum">   2:  </span>    <span class="rem">//create module instance</span></pre><pre class="alt"><span class="lnum">   3:  </span>    <span class="kwrd">var</span> self = Ti.UI.createTabGroup();</pre><pre><span class="lnum">   4:  </span>&nbsp;</pre><pre class="alt"><span class="lnum">   5:  </span>    <span class="rem">//create app tabs</span></pre><pre><span class="lnum">   6:  </span>    <span class="kwrd">var</span> win1 = <span class="kwrd">new</span> Window(L(<span class="str">'home'</span>)), win2 = <span class="kwrd">new</span> Window(L(<span class="str">'settings'</span>));</pre><pre class="alt"><span class="lnum">   7:  </span>&nbsp;</pre><pre><span class="lnum">   8:  </span>    <span class="kwrd">var</span> tab1 = Ti.UI.createTab({</pre><pre class="alt"><span class="lnum">   9:  </span>        title : L(<span class="str">'home'</span>),</pre><pre><span class="lnum">  10:  </span>        icon : <span class="str">'/images/KS_nav_ui.png'</span>,</pre><pre class="alt"><span class="lnum">  11:  </span>        window : win1</pre><pre><span class="lnum">  12:  </span>    });</pre><pre class="alt"><span class="lnum">  13:  </span>    win1.containingTab = tab1;</pre><pre><span class="lnum">  14:  </span>&nbsp;</pre><pre class="alt"><span class="lnum">  15:  </span>    <span class="kwrd">var</span> tab2 = Ti.UI.createTab({</pre><pre><span class="lnum">  16:  </span>        title : L(<span class="str">'settings'</span>),</pre><pre class="alt"><span class="lnum">  17:  </span>        icon : <span class="str">'/images/KS_nav_views.png'</span>,</pre><pre><span class="lnum">  18:  </span>        window : win2</pre><pre class="alt"><span class="lnum">  19:  </span>    });</pre><pre><span class="lnum">  20:  </span>    win2.containingTab = tab2;</pre><pre class="alt"><span class="lnum">  21:  </span>&nbsp;</pre><pre><span class="lnum">  22:  </span>    self.addTab(tab1);</pre><pre class="alt"><span class="lnum">  23:  </span>    self.addTab(tab2);</pre><pre><span class="lnum">  24:  </span>&nbsp;</pre><pre class="alt"><span class="lnum">  25:  </span>    tab1.addEventListener(<span class="str">'click'</span>,<span class="kwrd">function</span>(){</pre><pre><span class="lnum">  26:  </span>        <span class="rem">//这个事件在iOS中不会被触发</span></pre><pre class="alt"><span class="lnum">  27:  </span>    });</pre><pre><span class="lnum">  28:  </span>&nbsp;</pre><pre class="alt"><span class="lnum">  29:  </span>    <span class="kwrd">return</span> self;</pre><pre><span class="lnum">  30:  </span>};</pre><pre class="alt"><span class="lnum">  31:  </span>&nbsp;</pre><pre><span class="lnum">  32:  </span>module.exports = ApplicationTabGroup;</pre></div>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>

<p>解决方案:</p>
<p>通过看Titanium附带的示例程序 Kitcken Sink , 找到了解决方案.</p>
<p>为TabGroup添加focus事件,然后对事件参数进行判断,来确定当前被点击的是那个tab.</p>
<p>&nbsp;</p>
<div class="csharpcode"><pre class="alt"><span class="lnum">   1:  </span><span class="kwrd">function</span> ApplicationTabGroup(Window) {</pre><pre><span class="lnum">   2:  </span>    <span class="rem">//create module instance</span></pre><pre class="alt"><span class="lnum">   3:  </span>    <span class="kwrd">var</span> self = Ti.UI.createTabGroup();</pre><pre><span class="lnum">   4:  </span>&nbsp;</pre><pre class="alt"><span class="lnum">   5:  </span>    <span class="rem">//create app tabs</span></pre><pre><span class="lnum">   6:  </span>    <span class="kwrd">var</span> win1 = <span class="kwrd">new</span> Window(L(<span class="str">'home'</span>)), win2 = <span class="kwrd">new</span> Window(L(<span class="str">'settings'</span>));</pre><pre class="alt"><span class="lnum">   7:  </span>&nbsp;</pre><pre><span class="lnum">   8:  </span>    <span class="kwrd">var</span> tab1 = Ti.UI.createTab({</pre><pre class="alt"><span class="lnum">   9:  </span>        title : L(<span class="str">'home'</span>),</pre><pre><span class="lnum">  10:  </span>        icon : <span class="str">'/images/KS_nav_ui.png'</span>,</pre><pre class="alt"><span class="lnum">  11:  </span>        window : win1</pre><pre><span class="lnum">  12:  </span>    });</pre><pre class="alt"><span class="lnum">  13:  </span>    win1.containingTab = tab1;</pre><pre><span class="lnum">  14:  </span>&nbsp;</pre><pre class="alt"><span class="lnum">  15:  </span>    <span class="kwrd">var</span> tab2 = Ti.UI.createTab({</pre><pre><span class="lnum">  16:  </span>        title : L(<span class="str">'settings'</span>),</pre><pre class="alt"><span class="lnum">  17:  </span>        icon : <span class="str">'/images/KS_nav_views.png'</span>,</pre><pre><span class="lnum">  18:  </span>        window : win2</pre><pre class="alt"><span class="lnum">  19:  </span>    });</pre><pre><span class="lnum">  20:  </span>    win2.containingTab = tab2;</pre><pre class="alt"><span class="lnum">  21:  </span>&nbsp;</pre><pre><span class="lnum">  22:  </span>    self.addTab(tab1);</pre><pre class="alt"><span class="lnum">  23:  </span>    self.addTab(tab2);</pre><pre><span class="lnum">  24:  </span>&nbsp;</pre><pre class="alt"><span class="lnum">  25:  </span>    self.addEventListener(<span class="str">'focus'</span>, <span class="kwrd">function</span>(e) {</pre><pre><span class="lnum">  26:  </span>&nbsp;</pre><pre class="alt"><span class="lnum">  27:  </span>        <span class="kwrd">var</span> info = Titanium.API.info;</pre><pre><span class="lnum">  28:  </span>&nbsp;</pre><pre class="alt"><span class="lnum">  29:  </span>        <span class="rem">// 在iOS中, e.source 是 TabGroup对象,</span></pre><pre><span class="lnum">  30:  </span>        <span class="rem">// 在Android中,e.source 是 Tab对象</span></pre><pre class="alt"><span class="lnum">  31:  </span>        <span class="kwrd">var</span> src = e.source;</pre><pre><span class="lnum">  32:  </span>        <span class="kwrd">var</span> tab = e.tab;</pre><pre class="alt"><span class="lnum">  33:  </span>        <span class="kwrd">var</span> preTab = e.previousIndex;</pre><pre><span class="lnum">  34:  </span>&nbsp;</pre><pre class="alt"><span class="lnum">  35:  </span>        <span class="rem">// e.tab 是当前获得焦点的tab</span></pre><pre><span class="lnum">  36:  </span>        <span class="rem">// e.index 当前获得焦点的tab的索引,首次为-1</span></pre><pre class="alt"><span class="lnum">  37:  </span>        <span class="rem">// e.previousTab 上个tab</span></pre><pre><span class="lnum">  38:  </span>        <span class="rem">// e.previousIndex 上个tab的索引,首次为null</span></pre><pre class="alt"><span class="lnum">  39:  </span>&nbsp;</pre><pre><span class="lnum">  40:  </span>        <span class="rem">// On iOS, the "More..." tab is actually a tab container, not a tab. When it is clicked, e.tab is undefined.</span></pre><pre class="alt"><span class="lnum">  41:  </span>        <span class="kwrd">if</span> (!tab) {</pre><pre><span class="lnum">  42:  </span>            info(<span class="str">'在iOS中点击了"More..."'</span>);</pre><pre class="alt"><span class="lnum">  43:  </span>            <span class="kwrd">return</span>;</pre><pre><span class="lnum">  44:  </span>        }</pre><pre class="alt"><span class="lnum">  45:  </span>&nbsp;</pre><pre><span class="lnum">  46:  </span>        <span class="rem">// 首次</span></pre><pre class="alt"><span class="lnum">  47:  </span>        <span class="kwrd">if</span> (!preTab) {</pre><pre><span class="lnum">  48:  </span>            info(<span class="str">'首次进入'</span>);</pre><pre class="alt"><span class="lnum">  49:  </span>            <span class="kwrd">return</span>;</pre><pre><span class="lnum">  50:  </span>        }</pre><pre class="alt"><span class="lnum">  51:  </span>&nbsp;</pre><pre><span class="lnum">  52:  </span>        <span class="kwrd">if</span> (tab === tab1) {</pre><pre class="alt"><span class="lnum">  53:  </span>            info(<span class="str">'点击了tab1'</span>);</pre><pre><span class="lnum">  54:  </span>        } <span class="kwrd">else</span> <span class="kwrd">if</span> (tab === tab2) {</pre><pre class="alt"><span class="lnum">  55:  </span>            info(<span class="str">'点击了tab2'</span>);</pre><pre><span class="lnum">  56:  </span>        }</pre><pre class="alt"><span class="lnum">  57:  </span>    });</pre><pre><span class="lnum">  58:  </span>&nbsp;</pre><pre class="alt"><span class="lnum">  59:  </span>    <span class="kwrd">return</span> self;</pre><pre><span class="lnum">  60:  </span>};</pre><pre class="alt"><span class="lnum">  61:  </span>&nbsp;</pre><pre><span class="lnum">  62:  </span>module.exports = ApplicationTabGroup;</pre></div>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style><img src ="http://www.blogjava.net/xmlspy/aggbug/397186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xmlspy/" target="_blank">xmlspy</a> 2013-03-31 02:54 <a href="http://www.blogjava.net/xmlspy/archive/2013/03/31/397186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我常用的Eclipse插件</title><link>http://www.blogjava.net/xmlspy/archive/2013/01/26/394789.html</link><dc:creator>xmlspy</dc:creator><author>xmlspy</author><pubDate>Fri, 25 Jan 2013 19:15:00 GMT</pubDate><guid>http://www.blogjava.net/xmlspy/archive/2013/01/26/394789.html</guid><wfw:comment>http://www.blogjava.net/xmlspy/comments/394789.html</wfw:comment><comments>http://www.blogjava.net/xmlspy/archive/2013/01/26/394789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xmlspy/comments/commentRss/394789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xmlspy/services/trackbacks/394789.html</trackback:ping><description><![CDATA[<p>以下的插件都可以使用Eclipse Marketplace进行查找,安装.</p> <p>&nbsp;</p> <ol> <li>AnyEdit Tools&nbsp; <br>介绍地址: <a title="http://marketplace.eclipse.org/content/anyedit-tools#.UQLITyd6OTU" href="http://marketplace.eclipse.org/content/anyedit-tools#.UQLITyd6OTU">http://marketplace.eclipse.org/content/anyedit-tools#.UQLITyd6OTU</a> <br>更新地址: <a title="http://andrei.gmxhome.de/eclipse/" href="http://andrei.gmxhome.de/eclipse/">http://andrei.gmxhome.de/eclipse/</a> <br><br>在更新地址中Eclipse3.5-4.2版本的分支里,没有找到AnyEdit Tools, <br>使用Eclipse Marketplace在里面查找anyedit,之后点击Install按钮可以安装. <br> <li>Eclipse Explorer <br>介绍: 主要用于 在操作系统资源管理器打开文件夹. 可以避免以下啰嗦操作: <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在资源上点击右键然后选择属性,然后在复制资源的系统路径,然后打开系统资源管理器,复制地址,回车… <br> <li>&nbsp; Eclipse Color Theme <br>介绍: 各种定义好的编辑器代码颜色模版. <br> <li>&nbsp; Java Source Attacher Feature <br>介绍: 可以帮助你查找你的jar包的源码, 这样在Java编辑器中点击ctrl+右键就可以查看jar包对应类的源码了, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果找不到会弹出对话框让你手动指定. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个非常有用,在做Android开发时, Android插件不允许你通过在jar上点击右键-&gt;Attach source, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 搞得好多jar包都无法实时查看方法的注释,使用这个插件就可以了. <br> <li>&nbsp; Eclipse EGit <br>介绍: git的Eclipse插件. <br> <li>Advanced Prototyping tool - Prototyper Free Edition 2.1 （在Marketplace中搜索 Prototyper） <br>介绍: 非常好用的 手机、平板、桌面应用和网站的原型设计工具，几乎支持现在市面上所有类型的手机、平板，如: iPhone、iPad、 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Android、BlackBerry、WindowsPhone等等。并且有大量可下载的模版和Widget。拖拖拽拽就可以做出原型。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.blogjava.net/images/blogjava_net/xmlspy/Windows-Live-Writer/Eclipse_1D7B/TM%E6%88%AA%E5%9B%BE%E6%9C%AA%E5%91%BD%E5%90%8D_2.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="TM截图未命名" border="0" alt="TM截图未命名" src="http://www.blogjava.net/images/blogjava_net/xmlspy/Windows-Live-Writer/Eclipse_1D7B/TM%E6%88%AA%E5%9B%BE%E6%9C%AA%E5%91%BD%E5%90%8D_thumb.png" width="527" height="427"></a> <br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其实这个不是Eclipse的插件,至少在Marketplace中找到后,无法直接安装的.不过可以进入页面中提供的主页链接 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 到这个工具的网站下载. <br>网站地址： <a title="http://www.justinmind.com/" href="http://www.justinmind.com/">http://www.justinmind.com/</a> </li></ol><img src ="http://www.blogjava.net/xmlspy/aggbug/394789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xmlspy/" target="_blank">xmlspy</a> 2013-01-26 03:15 <a href="http://www.blogjava.net/xmlspy/archive/2013/01/26/394789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse插件无法安装的问题</title><link>http://www.blogjava.net/xmlspy/archive/2006/12/13/87575.html</link><dc:creator>xmlspy</dc:creator><author>xmlspy</author><pubDate>Wed, 13 Dec 2006 11:46:00 GMT</pubDate><guid>http://www.blogjava.net/xmlspy/archive/2006/12/13/87575.html</guid><wfw:comment>http://www.blogjava.net/xmlspy/comments/87575.html</wfw:comment><comments>http://www.blogjava.net/xmlspy/archive/2006/12/13/87575.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/xmlspy/comments/commentRss/87575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xmlspy/services/trackbacks/87575.html</trackback:ping><description><![CDATA[
		<p>一安装插件eclipse就提示<br />   Properties Search for Eclipse 3.1.x (2.0.0) requires plug-in "org.eclipse.search (3.1.0)", or equivalent.</p>
		<p>靠,搞得我什么插件都安装不了 :(<br />   </p>
<img src ="http://www.blogjava.net/xmlspy/aggbug/87575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xmlspy/" target="_blank">xmlspy</a> 2006-12-13 19:46 <a href="http://www.blogjava.net/xmlspy/archive/2006/12/13/87575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>