Detected JREs

本文介绍如何利用deployJava.js脚本检测客户端Java运行环境(JRE)版本,并引导用户安装必要的Java版本以运行Applet程序。文中提供了具体的示例代码,包括如何使用deployJava.js进行版本检测、输出已安装的JRE版本以及确保正确版本的JRE已安装。
在项目中使用到Applet的,如果在客户端没有安装Jre的话那么客户端是不能启动Applet程序,那么这个时候使用Sun提供的deployJava.js去检测是很方便的。下面是最简单的实现:
首先将deployJava.js下下来,然后放在项目的js包中就可以了,再在你的jsp中加入下面的内容就可以了([color=red]目前deployJava只支持3种浏览器[MSIE,Netscape Family,Safari][/color])。

<body>
<script src="<%=request.getContextPath() %>/js/deployJava.js"></script>
<p>Detected JREs:
<b>
<script>
//下面是deployJava.js提供的function,这里只列举了一部分,详细看deployJava.js。
//document.writeln(navigator.language);获取浏览器中的语言设置
//deployJava.getJREs() 返回已安装JRE版本的清单
//versionCheck(pattern) 有已安装JRE版本与字符串模式(例如:“1.5*”,“1.6+”)匹配时返回true
//installLatestJRE() 使用浏览器或者“适于平台的机制”安装最新JRE
//writeAppletTag(attributes, parameters) 自动写Applet标签
//runApplet(attributes, parameters, version) 确保合适的JRE版本已经安装,然后输出Applet标签
//isWebStartInstalled() 检查WebStart是否已安装
//createWebStartLaunchButton(jnlpURL) 输出一个按钮,点击时确保WebStart已安装然后启动特定的JNLP
//setInstallerType(type) Sets the preferred install type : null, online, kernel.
//实例:deployJava.setInstallerType('kernel');
//setAdditionalPackages(packageList) Sets additional package list to be used by kernel installer.
//示例:deployJava.setAdditionalPackages('javax.swing, javax.xml');

//得到所有安装的jre版本
jres = deployJava.getJREs();
//下面是在jsp页面中输出你的jre版本。
document.writeln(jres.length ? jres : "None");

//下面就是检测Jre和version等,我这里是检测是否是1.6。这里使用了sun的Java2D,可以改用自己写的Applet,
//只需要替换codebase、archive和code后面的内容就可以了
deployJava.runApplet({codebase:"http://java.sun.com/products/plugin/1.5.0/demos/jfc/Java2D",
archive:"Java2Demo.jar", code:"java2d.Java2DemoApplet.class",
width:"1000", Height:"600"}, "fontSize:16","1.6");
</script>
</b>
</p>
</body>

另外还有很多中方式:比如JNLP等。
下面是使用JNLP.同样的是在jsp中加入下面的内容。

<body>
<script src="<%=request.getContextPath() %>/js/deployJava.js"></script>
<p>Detected JREs:
<b>
<script>
var attributes = {codebase:'http://java.sun.com/products/plugin/1.5.0/demos/jfc/Java2D',
code:'java2d.Java2DemoApplet.class', archive:'Java2Demo.jar', width:710, height:540} ;
var parameters = {fontSize:16, jnlp_href:'java2d.jnlp'} ;
var version = '1.6' ;
deployJava.runApplet(attributes, parameters, version);

</script>
</b>
</p>
</body>

还有就是在项目中需要加入*.jnlp文件,我这里是叫java2d.jnlp,对应了parameters参数中的jnlp_href:'java2d.jnlp'.
在附件中有我上面使用的两个文件,分别是deployJava.js和java2d.jnlp两个文件,更多内容可以参考sun官网。
http://java.sun.com/javase/6/docs/technotes/guides/jweb/deployment_advice.html
<think> 我们之前讨论的是Aux Power PM Enable,现在用户询问的是AUX Power Detected。 注意:这两个术语虽然都与辅助电源(Auxiliary Power)相关,但属于不同技术环节。 AUX Power Detected 通常指在设备初始化或电源状态转换过程中,系统检测到辅助电源存在的状态。 它是实现Aux Power PM功能的基础前提。 因此,本次回答需要聚焦于AUX Power Detected的技术含义、检测机制和系统交互。 </think> ### AUX Power Detected 技术解析 AUX Power Detected(辅助电源检测)是 PCIe 电源管理系统中的关键状态检测机制,用于确认设备能否在深度休眠状态下维持基础功能。以下是核心技术细节: --- #### 一、核心定义与作用 1. **技术本质** 当 PCIe 设备进入 D3cold 状态时,主电源($V_{cc}$)被切断,此时设备通过检测 $V_{aux}$ (辅助电源)电压判断能否支持: - **唤醒电路维持** - **PME(电源管理事件)生成** - **关键寄存器状态保存**[^1] 2. **系统级价值** ```mermaid graph TD A[系统休眠] --> B[主电源关闭] B --> C{AUX Power Detected?} C -->|是| D[启用D3cold节能] C -->|否| E[回退到D3hot状态] D --> F[维持μW级待机] ``` --- #### 二、检测机制实现 1. **硬件电路设计** - 专用比较器监测 $V_{aux}$ 阈值: $$V_{aux} \geq 3.0V \pm 5\% \quad \text{(PCIe规范要求)}$$ - 典型检测电路: ``` +--[比较器]---> AUX_PWR_DET# 信号 Vaux ──┬──[分压电阻]─── └──[参考电压源] ``` 2. **寄存器反馈** 状态通过 PCIe 能力寄存器实时上报: ```c // PMCSR (Power Management Control/Status Register) struct { uint16_t PowerState : 2; // 当前电源状态 uint16_t AUX_Detect : 1; // 位8:辅助电源检测标志(只读) uint16_t PME_Status : 1; // 位15:PME事件标志 }; ``` - `AUX_Detect=1`:$V_{aux}$ 可用,允许进入 D3cold - `AUX_Detect=0`:强制设备停留在 D3hot 状态[^2] --- #### 三、系统交互流程 1. **状态转换触发** ```mermaid sequenceDiagram 系统固件->>设备: 发送D3cold进入请求 设备->>电源电路: 检测Vaux电压 alt Vaux ≥ 3.0V 设备-->>系统: AUX_PWR_DET#=低电平 系统->>设备: 切断主电源(Vcc) else Vaux < 3.0V 设备-->>系统: AUX_PWR_DET#=高电平 系统->>设备: 保持D3hot状态 end ``` 2. **OS层对接** Linux内核通过ACPI处理检测结果: ```dts // ACPI设备树片段示例 power-resources { Name (_PR0, Package () { // 电源资源列表 ^PWRR, // 主电源资源 ^AUXR // 辅助电源资源 }) Method (_STA) { If (^^AUXR.AUXP) { // 检测辅助电源 Return (0x1F) // 返回"电源正常" } Else { Return (0x00) // 返回"电源故障" } } } ``` --- #### 四、设计约束与验证 1. **关键参数要求** | 参数 | 典型值 | 单位 | |---------------------|-------------|------| | $V_{aux}$ 工作范围 | 3.0 - 3.6 | V | | 检测响应时间 | < 100 | μs | | 静态电流($I_{aux}$) | 50 - 500 | μA | 2. **验证方法** - **硬件测试**: 使用可编程电源模拟 $V_{aux}$ 跌落(如从 3.3V → 2.7V),观测 `PMCSR` 寄存器变化 - **系统验证**: ```bash # Linux下查看设备电源状态 grep . /sys/bus/pci/devices/0000:01:00.0/power/* # 输出包含:aux_power_detected: 1 ``` --- #### 五、故障场景与处理 1. **常见问题** - **误检测**:电源噪声导致 $V_{aux}$ 瞬时跌落 解决方案:增加 RC 滤波电路,时间常数 $\tau \geq 10ms$ - **检测失效**:PMCSR.AUX_Detect 状态锁存 强制复位:通过 PCIe 配置空间的 `PMCSR` 写入 `0001b` 触发软复位[^3] 2. **安全设计** 采用冗余检测电路: ``` Vaux ──┬──[比较器1]── OR门 ──> AUX_PWR_DET# └──[比较器2]───┘ ``` 当任一比较器检测有效即视为 $V_{aux}$ 正常 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值