GVKun编程网logo

java6内置JS引擎初接触(java js引擎)

24

关于java6内置JS引擎初接触和javajs引擎的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ARM9初接触体验、Atom-shell初接触.[Mac]、eclipse初接触、Fire

关于java6内置JS引擎初接触java js引擎的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ARM9初接触体验、Atom-shell 初接触. [Mac]、eclipse初接触、Firefox扩展初接触等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

java6内置JS引擎初接触(java js引擎)

java6内置JS引擎初接触(java js引擎)

test01.js:

if(age>=18){  
    print(''Old enough to vote!'');  
}else{  
    print(''Back to school!'');  
}

test02.js:

if(age<25){  
    riskFactor = 1.5;  
}else if(noClaims){  
    ristFactor = 0.75;  
}else{  
    ristFactor = 1.0;  
}

test03.js:

function Hello(){}   
Hello.prototype.sayHello = function(value) {
    println(''hello!''+value);
}
Hello.prototype.increment = function(value) {
    return i+1;
}

var hello = new Hello();
hello.sayHello(''World1'');

Hello.java:

package com.hjr.demo.util.js;

public interface Hello {
    public int increment(int value);
    public void sayHello(String name);
}
ScriptEngineDemo.java:
package com.hjr.demo.util.js;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter;
import java.io.PrintWriter;

import javax.script.*;

public class ScriptEngineDemo {
	public static void main(String[] args) throws Exception {
		test10();
	}
	
	// 使用脚本引擎运行脚本程序
	public static void test01() throws ScriptException {
		// 如果调用者可访问线程上下文 ClassLoader,则调用此构造方法的效果与调用 ScriptEngineManager(Thread.currentThread().getContextClassLoader()) 相同  
	    // ScriptEngineManager检索感兴趣的脚本编写的语言的ScriptEngine对象 
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("js");
		engine.put("age", 26);
		engine.eval("if(age>=18){println(''Old enough to vote!'');}else{println(''Back to school!'');}");
	}
	
	// 使用脚本引擎执行外部资源中的脚本
	public static void test02() throws FileNotFoundException, ScriptException {
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("js");
		engine.put("age", 26);
		engine.eval(new FileReader("E:/ScriptEngine/test01.js"));// 对文件或其它外部资源中得脚本表达式进行求值  
	}
	
	// 使用脚本引擎检索结果
	public static void test03() throws FileNotFoundException, ScriptException {
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("js");
		engine.put("age", 26);
		engine.put("noClaims", Boolean.TRUE);
		Object result = engine.eval(new FileReader("E:/ScriptEngine/test02.js"));// eval()函数返回执行脚本后所返回的值,默认情况下,将返回上次执行的表达式的值  
		System.out.println(result.toString());
	}
	
	// 上下文属性的作用域
	public static void test04() throws ScriptException {
		ScriptEngineManager manager = new ScriptEngineManager();
		Bindings globalBindings = manager.getBindings(); // 属于ScriptEngineManager的全局上下文,每个ScriptEngineManager拥有一个Bindings
		globalBindings.put("name", "yangYong");
		ScriptEngine engine = manager.getEngineByName("js");
		Bindings globalBindings02 = engine.getBindings(ScriptContext.GLOBAL_SCOPE); // 每个引擎都共有一个ScriptEngineManager的Bindings
		System.out.println("name=" + globalBindings02.get("name"));
		System.out.println(globalBindings == globalBindings02);
		ScriptContext context = engine.getContext(); // 每个引擎都有自己独立的scriptContext上下文
		
		Bindings engineDefaultBindings = engine.getBindings(ScriptContext.ENGINE_SCOPE); // 每个引擎的scriptContext中都有个默认属于自己的Bindings
		engineDefaultBindings.put("gender", "男");
		engine.eval("name2 = name;println(name2);", engineDefaultBindings);
		engineDefaultBindings.put("name", "zhangSan");
		engine.eval("name2 = name;println(name2)", engineDefaultBindings);
		Bindings engineCreateBindings = engine.createBindings(); // 每个引擎的scriptContext中也可以新建多个属于自己的Bindings
		engineCreateBindings.put("gender", "女");
		System.out.println(engineDefaultBindings == engineCreateBindings);
		System.out.println(engine.getBindings(ScriptContext.ENGINE_SCOPE));
		System.out.println(engineCreateBindings.get("gender"));
		engine.eval("name2 = name;println(name2)", engineCreateBindings);
	}
	
	// java应用程序与脚本交互
	public static void test05() throws ScriptException {
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("js");
		Bindings bindings = engine.createBindings(); // Bindings:KV对映射,用来在Java应用程序和javascript脚本之间交换信息,即上下文
		bindings.put("age", 26);
		bindings.put("noClaims", Boolean.TRUE);
		bindings.put("riskFactor", 1.0);
		engine.eval("if(age<25){riskFactor = 1.5;}else if(noClaims){ristFactor = 0.75;}else{ristFactor = 1.0;}", bindings);//必须绑定bindings执行脚本,否则报变量未定义异常  
	    double risk = (Double) bindings.get("riskFactor");
	    System.out.println(risk);
	}
	
	// 脚本内部访问java资源
	public static void test06() throws ScriptException {
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("js");
		engine.eval("importPackage(java.util)");
		engine.eval("today = new Date();println(today)");
		engine.put("name", "ZhangSan");
		engine.eval("name2 = name.toUpperCase();println(name2);");
	}
	
	// 重定向脚本输出
	public static void test07() throws IOException, ScriptException {
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("js");
		
		PipedReader pr = new PipedReader();
		PipedWriter pw = new PipedWriter(pr);
		// 用户可以通过与这个 PrintWriter 连通的 PrintReader 读取实际的输出,使 Java 应用程序能获取脚本运行输出
		PrintWriter out = new PrintWriter(pw);
		engine.getContext().setWriter(out);
		
		engine.eval("println(''hello from javascript!'');");
		
		BufferedReader br = new BufferedReader(pr);
		System.out.println(br.readLine());
	}
	
	// 可编译且可调用的引擎
	public static void test08() throws ScriptException {
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("js");
		
		if (engine instanceof Compilable) { // 判断脚本引擎是否支持编译操作
			Compilable compilable = (Compilable)engine;
			CompiledScript script = compilable.compile("if(age<25){riskFactor = 1.5;}else if(noClaims){ristFactor = 0.75;}else{ristFactor = 1.0;}");
			
			Bindings bindings = engine.createBindings();
			bindings.put("age", 26);
            bindings.put("noClaims", Boolean.TRUE);
            bindings.put("riskFactor", 1.0);
			
            Object result = script.eval(bindings);
            System.out.println(result.toString());
		}
	}
	
	// 调用脚本中的函数和方法
	public static void test09() throws ScriptException, NoSuchMethodException, FileNotFoundException {
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("js");
		
		engine.eval("function increment(i){return i+1;}");
	    if (engine instanceof Invocable) { // 判断脚本引擎是否支持编译操作
	        Invocable invocable = (Invocable)engine; // Invocable允许从java代码调用定义在脚本中的单个函数  
	        Object result = invocable.invokeFunction("increment", new Object[]{10}); // 调用脚本中定义的顶层程序和函数
	        System.out.println("result = "+result);
	    }
	    
	    ScriptEngine engine2 = manager.getEngineByName("js");
	    engine2.eval(new FileReader("E:/ScriptEngine/test03.js"));
	    if (engine2 instanceof Invocable) {
	        Invocable invocable = (Invocable)engine2;
	        invocable.invokeMethod(engine2.get("hello"), "sayHello", "yangYong"); // 对以前的脚本执行中已经编译的脚本对象(以 ScriptEngine 的状态保持)调用某一方法
	    }  
	}
	
	// 调用脚本中的函数和方法并将他们作为java程序中的接口实现
	public static void test10() throws FileNotFoundException, ScriptException {
		/**
		 * TODO 这个用例存在问题,待处理
		 */
	    ScriptEngineManager manager = new ScriptEngineManager();
	    ScriptEngine engine = manager.getEngineByName("js");
	    engine.eval("function increment(i){return i+1;}");
	    
	    if (engine instanceof Invocable) {
	        Invocable invocable = (Invocable)engine;
	        Hello hello = invocable.getInterface(Hello.class); // 返回一个接口的实现,该接口使用解释器中编译的函数
	        Object result = hello.increment(2);
	        System.out.println("result = " + result);
	    }
	    
	    engine.eval(new FileReader("E:/ScriptEngine/test03.js"));
	    if (engine instanceof Invocable) {
	        Invocable invocable2 = (Invocable)engine;
	        Hello hello = invocable2.getInterface(engine.get("hello"), Hello.class); // 返回一个接口的实现,该接口使用解释器中已编译脚本对象的成员函数
	        hello.sayHello("zhangSan");
	    }  
	}  
}



ARM9初接触体验

ARM9初接触体验

终于拿到了ARM9开发板,打开盒子一看,厚厚的一叠光盘,跑到电脑前,想都没想把光盘拷贝到

电脑上,这个用了我一天时间,真多资料,后来看了看,只有一张配套光盘,其余的全是从网上下得资料,

不是配套资料,无语中~~~,后悔没看光盘中资料就拷贝到电脑,占了太多的硬盘,又有点舍不得删掉,

就放在那里。

该怎么学ARM9 呢? 我也不清楚,先看看开发板的使用手册吧,用花了一个一天时间看看手册,先开始用配

套光盘中有的内容体验一下系统的安装,有详细的说明,增加自己学习的兴趣,最后还是开始裸机程序学

习。

首先遇到的是NAND flash和nor flash,这个什么东东~~~(不懂 ,问百度老师)

nor和NAND是现在市场上两种主要的非易失闪存技术。

Nand-flash内存是flash内存的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有

效的解决方案。Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储。

大多数情况下闪存只是用来存储少量的代码,这时nor闪存更适合一些。而NAND则是高 数据存储密度的理

想解决方案。

 nor的特点是芯片内执行(XIP,eXecute In Place),这样应用程序可以直接在flash 闪存内运行,不必再

把代码读到系统RAM中。nor的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写

入和擦除 速度大大影响了它的性能。

  NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的

困难在于flash的管理和需要特殊的系统接口。

 

S3C2440支持两种启动模式:一种是从Nand Flash启动;一种从nor Flash启动。在此两种启动模式下,各个

片选存储空间是不同的:

在Nand Flash 启动模式下,内部的4KB  BootSram被映射到nGCS0片选空间。

在nor  Flash 启动模式下,与nGCS0相连的nor Flash 被映射到nGCS0片选空间.

Atom-shell 初接触. [Mac]

Atom-shell 初接触. [Mac]

前几天突然想起来弄 node-webkit 做点本地软件.

然后在微博上看见 八哥(@TooBug) 说Atom-shell 也不错,就打算研究一下.

结果第一天就笨死在了上面.

首先要解释一下 Atom-shell,并不是Atom编辑器, 他是一个单独的框架,Atom编辑器是基于Atom-shell 开发的,而我之前下载过Atom编辑器,所以就按照官方的例子上不停的使用:

$ ./Atom.app/Contents/MacOS/Atom your-app/

结果因为使用的是Atom编辑器,所以一直不出想像中的App窗口,而是不停的出Atom编辑器.

后来发现以后下载了 Atom-shell 当中的Mac版本(atom-shell-v0.15.8-darwin-x64).

解压后就会看到Atom.app 然后再参照官方的例子 就万事OK了.

继续研究下去.

eclipse初接触

eclipse初接触

. 设置编码格式

Windows->Preferences... 打开"首选项"窗口,点击左侧导航树到General->Workspace,在右侧视图中找到“Text file encoding”选项设置,一种是默认(Default),另一种是从下拉列表中选择(Other)。Eclipse Workspace默认的编码方式是操作系统的编码格式,这跟操作系统的设置有关系;另外我们可以选择Other单选按钮,然后从按钮右侧的下拉列表中选 择需要的编码格式(GBK、ISO-8859-1、UTF-16、UFT-16 etc.)。

设置编码格式的页面也可设置换行符,windows风格的还是linux风格的。


. 自动补全
最简单的修改方式是:Windows——>Preferences——>Java-->Editor-->Content Asist,在Auto activation triggers for Java后面的文本框里只有一个“.”。现在你将其改为“.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”即可。然后你再试试,会发现,现在的补全功能跟VS差不多了。你还可以在Advanced和Favorite里进行高级的设置。

. 修改字体


. eclipse常用快捷键

ctrl + shift + h    查看类的继承关系

ctrl+l,输入行数,将跳转到指定的行号处。

ctrl + shift + p 跳转到匹配的括号

F3 跳到定义处

ctrl + K  java文件中注释的快捷方式

ctrl + shift + /  xml中添加注释

ctrl + shift + \  xml中取消注释

ctrl + shift + r  打开资源文件

ctrl + shift + t 打开类


. 用eclipse时碰到的问题
logcat没抓到log-----可以考虑重启logcat,(实在不行只能重启eclipse了,不知还有没有更好的方法)

可以考虑在命令行地下使用adb logcat,在windows cmd底下直接使用adb logcat -h可以获取具体的使用方式。

简单来说可以使用类似于下面的方式

adb logcat myTag:D *:S

上述命令行输出Tag为“myTag”,优先级为debug的log输出,对应于代码中的Log.d(myTag, "my output message");

*:S目前是要加上的。


. 加载javadoc

eclipse有个不错的特点,鼠标停留在函数上,会出现悬浮框,对函数的使用进行说明,但是默认情况下不会对support v4的类进行说明。这需要进一步的配置。

文件结构是这样的,support-v4.jar放在libs目录底下。

libs/

    +android-support-v4.jar

     | android-support-v4.jar.properties

需要在android-support-v4.jar同一文件夹下添加properties文件,文件内容如下

=========以下是文件内容,E:\ws\adt\sdk是我sdk的位置

doc=E:\\ws\\adt\\sdk\\docs\\reference
src=E:\\ws\\adt\\sdk\\extras\\android\\support\\v4\\src

================

refresh后,重启下就能通过小视图查看api介绍了。













Firefox扩展初接触

Firefox扩展初接触

本文没涉及如何写一个扩展,而是简单整理一下扩展涉及到的周边的东西。

环境

Profile配置文件的默认位置:

Windows

%APPDATA%\Mozilla\

Unix/Linux

~/.mozilla

为了不影响正常Firefox的使用,用来测试插件或扩展应该使用不同的Profile配置

使用新的Profile文件

通过

firefox -no-remote -P testplugin

可以启动让firefox使用名为testplugin的Profile配置,如果这个配置尚不存在,则会弹出对话框,我们可以点击创建。此时可以自己定义名字和选择目录

-no-remote的含义是开启一个新的实例(进程?),而不是在当前的实例中新开一个窗口。具体参数信息可以通过

firefox --help

获得。

现在 ~/.mozilla/firefox下有以下内容:

4bn7669x.default/
av24yatw.testplugin/
Crash Reports/
profiles.ini

修改Firefox配置

在地址栏输入about:config,修改以下参数的值

javascript.options.showInConsole = true

将chrome文件中的错误显示在Console里。

nglayout.debug.disable_xul_cache = true

关闭XUL缓存,这允许不重启而改变窗口以及对话的内容。

browser.dom.window.dump.enabled = true

这将允许dump()函数输出到stdout里。

javascript.options.strict = true

启用严格JavaScript错误提示。

extensions.logging.enabled = true

这将给出更多关于安装以及更新插件的信息。

某些项可能不存在,可以在页面点击右键,添加。

也可以直接修改Profile文件夹下的prefs.js文件

  • ~/.mozilla/firefox/av24yatw.testplugin/prefs.js

user_pref("nglayout.debug.disable_xul_cache",true);
user_pref("browser.dom.window.dump.enabled",true);

如果这个文件不存在,可以直接创建。

扩展的位置

假定我们已经有了一个扩展(文件夹或者.xpi文件),那么放到哪儿才能被firefox找到呢?

位置一

  • Windows

 %APPDATA%\Mozilla\Extensions\{ec8030f7-c20a-464f-9b0e-13a3a9e97384}\
  • liunx

/usr/lib/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-3a3a9e97384}/
~/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/

位置二

针对某个特定的Profile配置:

  • Windows

 %APPDATA%\Mozilla\Firefox\4bn7669x.default\Extensions\
  • Linux

~/.mozilla/firefox/4bn7669x.default/extensions/

位置三

Firefox安装目录下的

distribution/extensions/

子目录

如何放置?

位置有了,如果扩展该如何放置呢?命名有无要求?

每一个扩展都有一个install.rdf文件,该文件内有一个该扩展的ID(是一个uuid或者email地址)

    <em:id>helloworld@mozilla.doslash.org</em:id>

1. 如果我们将扩展的文件夹直接放置到前面提到的位置。那么文件夹名需要和该ID完全一致

helloworld@mozilla.doslash.org

2. 可以将该扩展其打包成.zip文件(后缀改为.xpi,标准的扩展安装文件?),放置到前面提及的位置

helloworld@mozilla.doslash.org.xpi

3. 我们可以将插件随便放置到一个其他位置,然后在前述位置下放置一个文本文件

helloworld@mozilla.doslash.org

其内容为我们插件所在的具体文件夹的路径。

第三种方法和前面的位置二应该是编写扩展时最常用的。

扩展的结构

├─install.rdf
├─chrome.manifest
├─content/
├─skin/
└─locale/
  • install.rdf

对扩展来说,这是最重要的一个文件。它指定了扩展的名字,ID,版本等等信息

  • chrome.manifest

这个文件也是必须的,它告诉Firefox该扩展提供了哪些内容。这部分东西通常会打包成一个jar文件(也是一个普通的.zip文件)

  • content/ skin/ locale/ ...

这些不是必须的,但大部分扩展都是这么组织内容的:

content

包含该扩展的UI和逻辑

skin

CSS 和一些图片(其他人可以提供新的皮肤)

locale

locale相关的文件,比如翻译等 (其他人可以提供翻译)

chrome

如前所述,chrome有3部分组成

  • chrome.manifest

content helloworld      content/
locale  helloworld      en-US   locale/en-US/
skin    helloworld      classic/1.0     skin/

访问这些文件时,通过chrome协议

chrome://packagename/section/path/to/file

比如:chrome://helloworld/content/overlay.xul

参考

  • https://developer.mozilla.org/en/Building_an_Extension

  • https://developer.mozilla.org/en/XUL_School/The_Essentials_of_an_Extension

  • http://yp.oss.org.cn/software/show_resource.php?resource_id=21



原文链接: http://blog.csdn.net/dbzhang800/article/details/6930425

关于java6内置JS引擎初接触java js引擎的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于ARM9初接触体验、Atom-shell 初接触. [Mac]、eclipse初接触、Firefox扩展初接触的相关信息,请在本站寻找。

本文标签: