Java小程序,也就是Java Applet,可以在Web浏览器中运行。Java Applet必须以<applet>脚本的形式嵌入到HTML页面中,才能在web浏览器中运行。

之前总以为本地安装了JDK,指定好JAVA_HOME和PATH环境变量,所有的Java程序就都可以运行了,后来有个同事让我帮他解决web浏览器中不能运行一个项目管理软件的甘特图时,才发现Java Applet和一般的Java应用的运行环境配置是不一样的。

在Windows上运行Java应用程序,只要有JDK的二进制目录,并指定好JAVA_HOME和PATH就可以直接使用了,并不需要通过JDK的安装程序安装。所以,可以将安装好的JDK目录打个压缩包备份起来,以后重装系统或是给其他机器装Java环境时,直接将JDK的二进制压缩包拷贝过去,解压后就可以直接使用了。

但在Windows中,配置Java Applet的运行环境,仅指定JDK目录是不行的,必须要满足:

  1. 用JRE安装程序包进行安装
  2. JRE版本为 web浏览器提供了Java Plugin
  3. JRE与Web浏览器的位长要一致,如都是32位,或都是64位的软件版本
这是因为,JRE安装时会将Java相关的信息写到注册表中,并为Web浏览器安装Java Plugin。Web浏览器的Java Plugin在运行Applet时,先会到Windows注册表中读取Java信息,再执行Applet程序。
 
这里要注意的是,JRE的版本不同,所支持的web浏览器和版本也不同。我本机的Web浏览器有IE8, Firefox16, Chrome19,安装JRE6u11后,只有IE8可以运行Applet;Firefox16下通过about:plugins可以看到有安装的Java Plugin,但无法运行Applet;而Chrome19下则显示没有Java Plugin。而安装JRE7u9后,所有的浏览器就都能运行Applet了。所以,最简单的话只需安装最新的JRE版本就行了。通常如果浏览器没有安装Java Plugin,在运行有Applet的网页时,会提示用户安装插件,一般直接安装后就可以了。
 
Java Tester这个网站,用于检查本地安装的JRE版本和软件厂商,同时可以检查Web浏览器是否可以运行Applet程序:
 
对于一般用户,安装Applet运行环境是很简单的,但有时恰恰是Java开发人员的浏览器反而运行不了Applet,这就有点寒碜了。Java开发人员本机上往往会安装多个Java版本,有时直接将JDK目录移动或删除了,没通过Windows控制面板进行卸载,造成Windows注册表中还有残留的Java安装信息,运行Java应用没问题,但在Web浏览器中Java Plugin就找不到JRE来执行Applet了。
 
安装JRE后,Java控制面板上会出现一个Java图标,如果发现Java的图标显示不出来了,点击时提示找不到程序,如下图:
 
 
上面无法显示的Java图标,说明Windows上的JRE环境已经找不到了,需要重新安装JRE。正常可用的JRE环境,如下图:
 
 
点击Java图标,可以打开Java控制面板(javacpl),说明Windows上的JRE已经是可用的了。
 
综上,Java应用和Java Applet对运行环境的要求是不一样的。Java应用运行时,不需要找注册表,只要指定好JDK目录就能运行。而对于Applet小程序,Web浏览器中的Java Plugin要通过注册表来查找JRE环境,运行Java Applet。
 
因此,建议本地Java环境:
  • 安装一个高版本的JRE,用于支持较新的Web浏览器运行Applet小程序
  • Java应用所需要的JDK,直接拷贝JDK二进制目录使用,不需要安装,多个JDK可并存,执行时确定使用JDK版本。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
附录1:如果无法重装JRE,可以按下面文章中的步骤,先清除注册表中的Java残留安装信息,再运行JRE安装程序:
 
附录2:如何在Web浏览器中启用 Java?(必须满足JRE已安装可用,且web浏览器已安装了Java Plugin的前提)

http://www.java.com/zh_CN/download/help/enable_browser.xml

附录3:Hello Applet

1. 编写Applet小程序,继承Applet基类:

  1. public class HelloApplet extends Applet {
  2. private static final long serialVersionUID = 5511892956119084309L;
  3. @Override
  4. public void init() {
  5. Graphics g = this.getGraphics();
  6. paint(g);
  7. }
  8. public void paint(Graphics g) {
  9. g.drawString("Hello Applet!", 45, 45);
  10. }
  11. }
public class HelloApplet extends Applet {

    private static final long serialVersionUID = 5511892956119084309L;

    @Override
public void init() {
Graphics g = this.getGraphics();
paint(g);
} public void paint(Graphics g) {
g.drawString("Hello Applet!", 45, 45);
}
}

2. 编译Applet

  1. CMD>javac HelloApplet.java
CMD>javac HelloApplet.java

3. 在index.html网页中嵌入Applet小程序

  1. ...
  2. <applet alt="" code="cn.david.applet.HelloApplet.class" archive="applet-1.0.0-SNAPSHOT.jar"  width="200" height="200"
  3. codebase=".">
  4. </applet>
  5. ...
...
<applet alt="" code="cn.david.applet.HelloApplet.class" archive="applet-1.0.0-SNAPSHOT.jar" width="200" height="200"
codebase=".">
</applet>
...

注意:

  • Applet小程序必须嵌入到网页中才能运行,使用<applet></applet>标签嵌入Applet
  • code属性指定Applet类
  • archive属性指定小程序所在的jar包,如果没有打包可省略
  • codebase属性指定用于查找Applet类和Jar包的根目录,这个目录是相对于网页所在目录而言的,即指定一个相对目录。codebase=".",表示,在网页目录下查找Applet小程序。
  • 网页中要使用<applet></applet>标签,使用<applet />时在网页中可正常运行,但在appletviewer中无法显示applet窗口。

4. 用appletviewer测试Applet小程序

  1. CMD>appletviewer index.html
CMD>appletviewer index.html

5. 在web浏览器中运行Applet小程序

 将网页拖到浏览器中查看,或将网页和Applet小程序部署到Apache的HTML文档目录下通过URL访问。

原文地址 http://yyjlinux.iteye.com/blog/1702514

JAVA运行环境 和 Java Applet的运行环境 的区别的更多相关文章

  1. Java,Hello World,《算法》环境搭建中的问题,用 cmd 和 IntelliJ Idea 分别编译和运行 Java 程序

    ▶ IntelliJ idea 下载和安装(http://www.jetbrains.com/idea/) ▶ 新建项目(如图),注意选择 SDK 类型和位置 ● 在 src 目录中新建一个 Pack ...

  2. Android(java)学习笔记160:Framework运行环境之 Android进程产生过程

    1.前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程序 ...

  3. Android(java)学习笔记103:Framework运行环境之 Android进程产生过程

    1. 前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程 ...

  4. Java复习笔记(一):概念解释和运行步骤

    一.java的一些概念 JAVA语言分为三:java ee,java se,java me java se:  java标准版,java的核心功能所在 java ee: java企业级开发,包含ser ...

  5. [JAVA] 一个可以编辑、编译、运行Java简单文件的记事本java实现

    本来是Java课做一个仿windows记事本的实验,后来突然脑子一热,结果就给它加了一个编译运行Java文件的功能. 本工程总共大约3000行代码,基本上把所学的java界面.文件.控件的功能都包含在 ...

  6. Java学习系列(一)Java的运行机制、JDK的安装配置及常用命令详解

    俗话说:“十五的月亮十六圆”.那学习是不是也是如此呢?如果把月亮看成是我们的愿望,那十五便是我们所处的“高原期”,坚持迈过这个坎,我相信你的愿望终究会现实的.记得马云曾说:今天很残酷,明天更残酷,后天 ...

  7. (转)JAVA路径问题及命令行编译运行基础(linux下)

    原地址: http://blog.csdn.net/biaobiaoqi/article/details/6846274 java的运行机制的基本概念: 源文件 也就是我们熟知的.java文件. 类文 ...

  8. java juint框架的windows自动化-自动运行juint程序简述

    在京东混了一个月,基本有点稳定了,觉得也有所余力了现在,继续写博客吧,不过以后更新也许不是那么频繁了 本人使用的是juint框架,对开发是一个单元测试的java框架,但是对测试而言是java的基石之一 ...

  9. java程序在windows系统作为服务程序运行

    Java程序很多情况下是作为服务程序运行的,在Un*x 平台下可以利用在命令后加“&”把程序作为后台服务运行,但在Windows下看作那个Console窗口在桌面上,你是否一直担心别的同时把你 ...

随机推荐

  1. 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解

    数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...

  2. Kubernetes K8S之资源控制器Daemonset详解

    Kubernetes的资源控制器Daemonset详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/ ...

  3. 关于babel你需要知道的事情

    babel js转码器 ES6 ==> ES5 配置 .babelrc

  4. unity 模板测试 详解

    https://blog.csdn.net/u011047171/article/details/46928463#t4

  5. 【HttpRunner v3.x】笔记 ——1. 环境安装

    一.环境说明 HttpRunner 是一个基于 Python 开发的测试框架,可以运行在 macOS.Linux.Windows 系统平台上.笔者使用的是windows系统,所以后续都是基于windo ...

  6. MockMvc编写单测

    目录 MockMvc 注意点 code 待测试的controller 测试类 github MockMvc 注意点 1.通过spring上下文获取mockmvc对象 @BeforeEach publi ...

  7. 如何配置node环境变量

    1,安装node.js   最后安装的目录在 检测node安装成功   node -v 如果报错   没有默认装在c盘  pro 需要配置环境变量 Npm   node  package  manag ...

  8. Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  9. liunx之firewalld&SELinux

    1.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status f ...

  10. Android实现二值点阵图识别

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star 前言 我这几天在做一个东西,就是一张像二维码这样的 n*n ...