关于java6内置JS引擎初接触和javajs引擎的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ARM9初接触体验、Atom-shell初接触.[Mac]、eclipse初接触、Fire
关于java6内置JS引擎初接触和java js引擎的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ARM9初接触体验、Atom-shell 初接触. [Mac]、eclipse初接触、Firefox扩展初接触等相关知识的信息别忘了在本站进行查找喔。
本文目录一览: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 呢? 我也不清楚,先看看开发板的使用手册吧,用花了一个一天时间看看手册,先开始用配
套光盘中有的内容体验一下系统的安装,有详细的说明,增加自己学习的兴趣,最后还是开始裸机程序学
习。
首先遇到的是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]
前几天突然想起来弄 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初接触
. 设置编码格式
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扩展初接触
本文没涉及如何写一个扩展,而是简单整理一下扩展涉及到的周边的东西。
环境
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扩展初接触的相关信息,请在本站寻找。
本文标签: