posts - 11,  comments - 21,  trackbacks - 0

使用eclipse的nodejs的插件,右键运行app.js,控制台一闪而过,没有启动起来.

通过搜索,发现原来是JDK版本的问题,我用的是JDK6,不好使,使用JDK7就好使了.

如果有多个JDK版本共存,可以使用在eclipse安装目录下的文件eclipse.ini指定要使用的JDK:

-vm
C:/Program Files/Java/jdk1.7.0_55/bin/javaw.exe

posted @ 2014-04-25 03:52 xmlspy 阅读(214) | 评论 (0)编辑 收藏

很多人在安装完Eclipse之后什么都不设置,直接用默认的设置,默认的设置有很多问题。
在项目管理中应该统一Eclipse的设置。

通过菜单Window->Preferences打开设置窗口。

  • General->Editors->Text Editors:
    选上Insert spaces for tabs : 缩进使用空格,不使用Tab.原因是当把代码复制给网络上的显示的时候,
    Tab经常会被删除,导致格式完全乱套.
    选上Show line numbers : 显示行号,这个在debug的时候快速定位非常方便.
    选上Show print margin,然后在下面的Print margin column输入框中输入120 : 显示一条竖线,
    用于标示打印机打印时的宽度.这里用于代码自动换行的宽度. 设置为120个字符.这个同样在Java
    代码格式化的时候用到,后继会说到.
    Y3RDP4``Q@][2]JX]3DYVA7[4]
  • General->Workspace
    在Text file encoding中选择Other,然后在下拉框中选UTF-8 : 这样所有项目都是用UTF-8编码.默认的是GBK.
  • Java->Code Style->Formatter
    这里是Java代码格式化相关的选项, 要修改默认的设置,需要新建一个配置.

    点击按钮 New… 在弹出框中的 Profile name 输入框输入新配置的名称,这里输入 11, 然后点击OK按钮.
    在新弹出的配置窗口中,选择标签Indentation, 在Tab policy下拉框中选择 Spaces only : 缩进使用空格.
    这里需要注意,如果在General->Editors->Text Editors中选择了Insert spaces for tabs, 而在格式化选项中
    没有改成使用空格,那么在Java代码格式化后,仍然使用Tab.

    选择标签 Line Wrapping,在Maximum line width输入框输入120 : 在120个字符后换行, 上面的 Print margin column
    也用的120,这样就知道换行的标示了.

其他如果有Editor的地方,缩进也都要改成4个空格. 比如: Web节点下面的CSS Files, HTML Files.

posted @ 2013-11-17 15:32 xmlspy 阅读(2701) | 评论 (2)编辑 收藏

使用这个东西的好处是,可以发布到多个Blog上,免得使用Web编辑器苦逼地编辑.

下载地址: http://windows.microsoft.com/zh-cn/windows-live/essentials-other#essentials=overviewother

* 使用Live Writer在oschina上写Blog: http://my.oschina.net/javayou/blog/39107

* 使用Live Writer在BlogJava上鞋Blog: http://www.blogjava.net/vulcan/archive/2010/11/05/337323.html

注意:  - 在日志类型中选择Metaweblog API

          - API连接为: http://www.blogjava.net/你的blog名称/services/metaweblog.aspx

posted @ 2013-10-02 22:46 xmlspy 阅读(218) | 评论 (0)编辑 收藏

更新了最新Android ADT工具后,出现 TypeError: argument of type 'NoneType' is not iterable.

O{J4%Z8HX[DQ%ORWFHNWGUC

解决:

    复制 build-tool/17.0.0/ 下所有内容到 platform-tools 目录下.

参考:

https://developer.appcelerator.com/question/152497/titanium-sdk-310-error-typeerror-argument-of-type-nonetype-is-not-iterable-on-building-android-app

posted @ 2013-05-31 09:05 xmlspy 阅读(581) | 评论 (0)编辑 收藏

有时候Titanium中的终端会显示:

This Terminal Emulator is not functional because no 'bash' shell could be found.

Please correct the problem and restart the IDE.

解决办法:

  • Team / Git / Git Executable (was empty)   --指定正确的git.exe文件位置
  • Titanium Studio / NodeJS / Node Executable (was empty also) ---- 指定NodeJS的node.exe的位置

 

然后重启终端就好了.

posted @ 2013-05-30 19:33 xmlspy 阅读(213) | 评论 (0)编辑 收藏

1.目的

在WebView控件中,如果页面中调用了javascript脚本console.log 方法,就调用一个Java方法.

 

2.默认实现方法

在Android的WebView控件中,有一个setChromeClient(WebChromeClient)方法,

此方法的参数是WebChromeClient对象,通过重载此对象中的onConsoleMessage方法就

可以达到此目的.看代码:

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("[WebView]", String.format("[%s] sourceID: %s lineNumber: %n message: %s",
                messageLevel, sourceID, lineNumber, message));

        return super.onConsoleMessage(consoleMessage);
    }

    @Override
    public void onConsoleMessage(String message, int lineNumber, String sourceID) {
        Log.i("[WebView]", String.format("sourceID: %s lineNumber: %n message: %s", sourceID,
                lineNumber, message));
        super.onConsoleMessage(message, lineNumber, sourceID);
    }
}

第一个方法onConsoleMessage(ConsoleMessage consoleMessage)是新版本的android才有的方法,第二个方法是旧版本的.

第二个方法已经不推荐使用了,但是在旧版本的android中,仍然需要此方法.所以最好两个方法都实现.

 

3.问题

默认的实现在某些版本的手机中不好使,onConsoleMessage方法死活不被调用

 

4.解决方案

使用WebView的addJavascriptInterface方法:

// 首先,定一个类,叫什么名称都可以,但是里面的方法名必须与
// Javascript的console中的方法名对应
private class Console{
    private static final String TAG="[WebView]";
    public void log(String msg){
        Log.i(TAG,msg);
    }
	// 还可以添加其他的方法,比如: warn,assert等等
}

// 然后,为WebView添加对应的接口
webView.addJavascriptInterface(new Console, "console");

 

这个解决方案有一个不好的地方,就是输出的内容没有onConsoleMessage方法那么详细,比如行号,就没法输出.

所以,我们应该在onConsoleMessage好使的时候使用onConsoleMessage,不好使的时候在使用我们自定义的方式.

那么,如何来判断onConsoleMessage是否好使呢? 我们可以在程序初始化的时候,先在WebView中运行一下console.log,

如果onConsoleMessage运行了,就添加一个标记,表示默认的实现是好使的.

@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("javascript:console.log('testConsoleMessage')");
	
    if (((TestConsoleMessageWebChromeClient)webChromeClient).isConsoleMessageOK()){
	    // 这里额外使用了一个新的类 TestConsoleMessageWebChromeClient
		// 如果不适用TestConsoleMessageWebChromeClient,就需要在
		// DefaultWebChromeClient中添加标记字段 consoleMessageOK,
		// 这样如果方法onConsoleMessage好使,那么每次都给consoleMessageOK赋值,
		// 这个有些多余,也影响性能.
        webChromeClient = new DefualtWebChromeClient();
    }else{
	    // onConsoleMessage不好使,就使用这种方式,第二个参数值必须是"console"
        webView.addJavascriptInterface(new Console(), "console");
    }
    
    webView.loadUrl("http://www.baidu.com");

    return super.onCreateView(inflater, container, savedInstanceState);
}

// 当默认的onConsoleMessage不好使的时候使用的类
private class Console {
    private static final String TAG = "[WebView]";

    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("[WebView]", String.format("[%s] sourceID: %s lineNumber: %n message: %s",
                messageLevel, sourceID, lineNumber, message));

        return super.onConsoleMessage(consoleMessage);
    }

    @Override
    public void onConsoleMessage(String message, int lineNumber, String sourceID) {
        Log.i("[WebView]", String.format("sourceID: %s lineNumber: %n message: %s", 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;
    }
}
posted @ 2013-04-28 01:46 xmlspy 阅读(2999) | 评论 (0)编辑 收藏

匿名立即执行函数

   1:  // 方式一,这种方式多用了一个括号,看着别扭
   2:  (function(param) {
   3:      alert(param);
   4:  })(10);
   5:   
   6:  // 方式二,使用 ! 操作符
   7:  !function(param) {
   8:      alert(param);
   9:  }(10);

使用匿名立即执行函数的好处是,可以避免变量冲突.

条件判断

   1:  //========================= 条件判断
   2:  var sabiable = true;
   3:  //普通方式
   4:  if (sabiable) {
   5:      alert('You are sability!');
   6:  }
   7:   
   8:  //诡异方式,利用 ||和 && 操作符
   9:  // a||b : 只有在a为fasle或者返回false时才会执行b,当a为true时,直接返回a,后面的b不会执行
  10:  // a&&b : 只有在a为true或者返回true时才会执行b,当a为时,直接返回a,后面的b不会执行
  11:   
  12:  // 上面的代码可以改为:
  13:  sabiable && alert('You are sability!');
posted @ 2013-04-01 06:57 xmlspy 阅读(194) | 评论 (0)编辑 收藏

问题: 以下代码,tab1的click事件在Android中生效,在iOS不生效

   1:  function ApplicationTabGroup(Window) {
   2:      //create module instance
   3:      var self = Ti.UI.createTabGroup();
   4:   
   5:      //create app tabs
   6:      var win1 = new Window(L('home')), win2 = new Window(L('settings'));
   7:   
   8:      var tab1 = Ti.UI.createTab({
   9:          title : L('home'),
  10:          icon : '/images/KS_nav_ui.png',
  11:          window : win1
  12:      });
  13:      win1.containingTab = tab1;
  14:   
  15:      var tab2 = Ti.UI.createTab({
  16:          title : L('settings'),
  17:          icon : '/images/KS_nav_views.png',
  18:          window : win2
  19:      });
  20:      win2.containingTab = tab2;
  21:   
  22:      self.addTab(tab1);
  23:      self.addTab(tab2);
  24:   
  25:      tab1.addEventListener('click',function(){
  26:          //这个事件在iOS中不会被触发
  27:      });
  28:   
  29:      return self;
  30:  };
  31:   
  32:  module.exports = ApplicationTabGroup;

解决方案:

通过看Titanium附带的示例程序 Kitcken Sink , 找到了解决方案.

为TabGroup添加focus事件,然后对事件参数进行判断,来确定当前被点击的是那个tab.

 

   1:  function ApplicationTabGroup(Window) {
   2:      //create module instance
   3:      var self = Ti.UI.createTabGroup();
   4:   
   5:      //create app tabs
   6:      var win1 = new Window(L('home')), win2 = new Window(L('settings'));
   7:   
   8:      var tab1 = Ti.UI.createTab({
   9:          title : L('home'),
  10:          icon : '/images/KS_nav_ui.png',
  11:          window : win1
  12:      });
  13:      win1.containingTab = tab1;
  14:   
  15:      var tab2 = Ti.UI.createTab({
  16:          title : L('settings'),
  17:          icon : '/images/KS_nav_views.png',
  18:          window : win2
  19:      });
  20:      win2.containingTab = tab2;
  21:   
  22:      self.addTab(tab1);
  23:      self.addTab(tab2);
  24:   
  25:      self.addEventListener('focus', function(e) {
  26:   
  27:          var info = Titanium.API.info;
  28:   
  29:          // 在iOS中, e.source 是 TabGroup对象,
  30:          // 在Android中,e.source 是 Tab对象
  31:          var src = e.source;
  32:          var tab = e.tab;
  33:          var preTab = e.previousIndex;
  34:   
  35:          // e.tab 是当前获得焦点的tab
  36:          // e.index 当前获得焦点的tab的索引,首次为-1
  37:          // e.previousTab 上个tab
  38:          // e.previousIndex 上个tab的索引,首次为null
  39:   
  40:          // On iOS, the "More..." tab is actually a tab container, not a tab. When it is clicked, e.tab is undefined.
  41:          if (!tab) {
  42:              info('在iOS中点击了"More..."');
  43:              return;
  44:          }
  45:   
  46:          // 首次
  47:          if (!preTab) {
  48:              info('首次进入');
  49:              return;
  50:          }
  51:   
  52:          if (tab === tab1) {
  53:              info('点击了tab1');
  54:          } else if (tab === tab2) {
  55:              info('点击了tab2');
  56:          }
  57:      });
  58:   
  59:      return self;
  60:  };
  61:   
  62:  module.exports = ApplicationTabGroup;
posted @ 2013-03-31 02:54 xmlspy 阅读(231) | 评论 (0)编辑 收藏

以下的插件都可以使用Eclipse Marketplace进行查找,安装.

 

  1. AnyEdit Tools 
    介绍地址: http://marketplace.eclipse.org/content/anyedit-tools#.UQLITyd6OTU
    更新地址: http://andrei.gmxhome.de/eclipse/

    在更新地址中Eclipse3.5-4.2版本的分支里,没有找到AnyEdit Tools,
    使用Eclipse Marketplace在里面查找anyedit,之后点击Install按钮可以安装.
  2. Eclipse Explorer
    介绍: 主要用于 在操作系统资源管理器打开文件夹. 可以避免以下啰嗦操作:
            在资源上点击右键然后选择属性,然后在复制资源的系统路径,然后打开系统资源管理器,复制地址,回车…
  3.   Eclipse Color Theme
    介绍: 各种定义好的编辑器代码颜色模版.
  4.   Java Source Attacher Feature
    介绍: 可以帮助你查找你的jar包的源码, 这样在Java编辑器中点击ctrl+右键就可以查看jar包对应类的源码了,
            如果找不到会弹出对话框让你手动指定.
            这个非常有用,在做Android开发时, Android插件不允许你通过在jar上点击右键->Attach source,
            搞得好多jar包都无法实时查看方法的注释,使用这个插件就可以了.
  5.   Eclipse EGit
    介绍: git的Eclipse插件.
  6. Advanced Prototyping tool - Prototyper Free Edition 2.1 (在Marketplace中搜索 Prototyper)
    介绍: 非常好用的 手机、平板、桌面应用和网站的原型设计工具,几乎支持现在市面上所有类型的手机、平板,如: iPhone、iPad、
             Android、BlackBerry、WindowsPhone等等。并且有大量可下载的模版和Widget。拖拖拽拽就可以做出原型。
             TM截图未命名

            其实这个不是Eclipse的插件,至少在Marketplace中找到后,无法直接安装的.不过可以进入页面中提供的主页链接
            到这个工具的网站下载.
    网站地址: http://www.justinmind.com/
posted @ 2013-01-26 03:15 xmlspy 阅读(1931) | 评论 (0)编辑 收藏

一安装插件eclipse就提示
   Properties Search for Eclipse 3.1.x (2.0.0) requires plug-in "org.eclipse.search (3.1.0)", or equivalent.

靠,搞得我什么插件都安装不了 :(
  

posted @ 2006-12-13 19:46 xmlspy 阅读(3243) | 评论 (3)编辑 收藏

<2006年12月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜