使用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
代码格式化的时候用到,后继会说到.
- 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.
解决:
复制 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) |
编辑 收藏