ubuntu 12.04 JDK和JVM配置,浏览器执行Applet
(仅仅是记自己的行径,为以后再配置作参考。没有权威性。)
我走了弯路,不知道jdk里边会包含jre,所以首先装了jre,其实可以不用装jre直接装jdk的,jdk是jre的超集。
jre是java程序的运行环境(如带打开嵌有java程序的网页需要jre),如果自己不开发java程序的话,装jre就行了。
(一)装jre
1. 官网下载jre-7u21-linux-i586.rpm http://www.java.com/en/download/manual.jsp
2. mkdir /usr/java, 将rpm软件包拷贝到该目录下。
3. 安装程序包
rpm -ivh jre-7u7-linux-i586.rpm
要升级程序包,请键入:
rpm -Uvh jre-7u7-linux-i586.rpm
4. 安装完成,可删除rpm包。
5. 配置环境变量,在/etc/profile文件末尾加上:
export JAVA_HOME=/usr/java/jre1.7.0_21
export JAVA_BIN=/usr/java/jre1.7.0_21/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
我在~/.profile文件里也加入了上述内容。
6. 验证。终端执行java -version,打印出相关版本信息,则安装成功。
但是要在浏览器中显示带有Applet的网页,还需要两个步骤:
1. 进入firefox的plugin目录下,将JRE的的一个插件文件链接到mozilla的plugin目录下(在命令行下(root权限)
cd /usr/lib/firefox/plugins
ln -s /usr/java/jre1.7.0_21/plugin/i386/ns7/libjavaplugin_oji.so libjavaplugin_oji.so
chromium-browser浏览器同理。
2. 我在这样做之后,还是不能打开具有Applet的网页。还需要一个东西:IcedTea-Web Plugin。
打开ubuntu软件中心,搜索icedted-7-plugin,安装。装好了之后在火狐或者谷歌浏览器地址栏输入about:plugins,可以看见已经有IcedTea-Web Plugin这个插件了。(icedted-7-plugin会附带安装openjdk,安装在jdk所安装的目录下。我的是/usr/lib/jvm)
其他设置:
$ cd /usr/java/jre1.7.0_21/bin
$ ls
会看见有个ControlPanel
执行:
$ sudo ./ControlPanel
会弹出java控制面板,可在安全选项卡进行相关设置。
到这里打开具有Applet的网页,应该不会再显示“缺少必要的插件,请安装JVM”了。可以到官网提供的测试页面测试一下:http://java.com/zh_CN/download/testjava.jsp
(但是我自己写的Applet程序,可以用Appletviewer打开,嵌入到浏览器中却不能正常显示,说是“未初始化小应用程序”。这一点尚未解决。)
更新——已解决:
以chromium-browser浏览器为例:
在装了icedted-7-plugin这个之后,其实并不能解决问题,还需要一步
ln -s /usr/lib/jvm/jdk1.7.0_21/jre/lib/i386/libnpjp2.so /usr/lib/chromium-browser/plugins
这时候在浏览器地址栏中输入
about:plugins
会看到多了一个Java(TM)Java plug-in for NPAPI-based browsers.在插件管理里即使将icedted-7-plugin禁用掉,仍然能够执行Applet。可见icedted-7-plugin并不能解决根本问题。
到现在为止,我的/usr/lib/chromium-browser/plugins目录下有
IcedTeaPlugin.so libjavaplugin_oji.so libnpjp2.so
这三个链接,它们的目录分别是:
/usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/IcedTeaPlugin.so
/usr/lib/jvm/jdk1.7.0_21/jre/plugin/i386/ns7/libjavaplugin_oji.so
/usr/lib/jvm/jdk1.7.0_21/jre/lib/i386/libnpjp2.so
firefox同理。但是firefox的目录有点多,我都没搞清楚,自己试一下吧,将上述的三个.so文件链接到以下三个目录(不是一个目录下链接一个,是每个目录下都有三个.so文件。到底起作用的是哪一个或两个我也懒得去管啦):
$ cd ~/.mozilla/plugins/
$ cd /usr/lib/mozilla/plugins/
$ cd /usr/lib/firefox/plugins
(二)安装jdk
如果装了jre,在/usr/java/jre1.7.0_21/bin目录下可以看见java可执行文件,所以可以用
java HelloWorld
命令执行已编译好的HelloWorld.class文件。但是将HelloWorld.java源程序文件编译成class文件,如下
javac HelloWorld.java
就需要安装jdk。jdk的bin目录下有java,javac,javadoc,appletviewer,jar等等。
我是按照这篇文章安装jdk的:
先去 Oracle下载Linux下的JDK压缩包,我下载的是jdk-7u4-linux-i586.tar.gz文件,下好后直接解压
Step1:
# 将解压好的jdk1.7.0_04文件夹用最高权限复制到/usr/lib/jvm目录里
sudo cp -r ~/jdk1.7.0_04/ /usr/lib/jvm/
Step2:
# 配置环境变量
sudo gedit ~/.profile
在末尾加上:
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_04
然后保存关闭,使用source更新下
$ source ~/.profile
使用env命令察看JAVA_HOME的值
$ env
如果JAVA_HOME=/usr/lib/jvm/jdk1.7.0_04,说明配置成功。
Step3:
# 将系统默认的jdk修改过来
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_04/bin/java 300
输入sun jdk前的数字就好了
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_04/bin/javac 300
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
Step4:
然后再输入java -version,看到如下信息,就说明改成sun的jdk了:
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) Server VM (build 23.0-b21, mixed mode)
(三)demo
HelloWorld示例:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }
保存为HelloWorld.java(文件名必须与类名一致)
编译:$ javac HelloWorld.java
运行:$ java HelloWorld 输出
Hello World!
则表示jdk安装成功。
Applet例子:
import java.applet.Applet; import java.awt.Graphics; public class Welcome extends Applet { public void paint(Graphics g) { g.drawString("Welcome to Java!", 60, 25); } }
保存为Welcome.java
编译:javac Welcome.java
产生Welcome.class。这个Welcome.class文件不能直接用
java Welcome
执行,因为Applet小应用程序里没有主函数main.
所以,该这么做:
新建一个html文件:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>载入applet</title> <h1><center><font color="red">JavaScript与Java Applet之间的通信</font></center></h1> <hr/> </head> <body bgcolor="orange"> <center> <applet code="Welcome.class" name="testTxt" width="450" height="150"> </applet> </center> </body> </html>
随便保存为一个名字,如1.html。
用浏览器打开1.html,或者在当前目录执行
$ appletviewer 1.html
即可打开Applet应用程序。
(appletviewer 1.html可以执行我的程序,但是在浏览器中仍然不显示。不是jvm的关系。
今天又看到一种方法,Applet还可以这么运行:
新建HelloWorld.java:
import java.awt.*; import java.applet.*; public class HelloWorld extends Applet { public void paint(Graphics g) { g.drawString("HelloWorld",30,30); } } //<applet code=HelloWorld width=200 height=200> //</applet>
注意最后两行不能去掉,包括“//”必须保留。
然后用不着编译啦,直接
appletviewer HelloWorld.java
就能弹出运行Applet的框,程序开始运行。