我这有一个关于vrml和java的东西。最后应该用ie连接起来。
现在ie能刷出两个模块却不能把它们连接起来。
我发现java控制台一直在报错。
请高手指点。控制台报错:
Exception in thread "thread applet-changecolor.class-1" java.lang.NoClassDefFoundError: vrml/external/Browser
at changecolor.start(changecolor.java:31)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: vrml.external.Browser
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 3 more
Caused by: java.io.FileNotFoundException: C:\Users\oyyl\Desktop\图形学\教案演示例\5章 VRML和Java交互\1\vrml\external\Browser.class (系统找不到指定的路径。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
... 7 more以下是代码:
java部分:
import java.awt.*;
import java.applet.*;
import vrml.external.Browser;
import vrml.external.Node;
import vrml.external.field. EventInSFColor;
public class changecolor extends Applet {
// 定义三个滑动条,分别表示三种颜色分量的当前值
Scrollbar scrBar[]=new Scrollbar[3];
// 定义三个滑动条的名称
Label labelColor[]=new Label[3];
// 定义一个名称:三个颜色分量的和-真正的颜色
Label labelDemo;
// 定义当前浏览器,在每个交互程序中必须存在的
Browser browser;
// 为了改变场景中的颜色,定义一个场景中物体材料属性节点
// 注意:在VRML中所有的节点都是从Node节点中继承的,所以可以这样定义
Node myMaterial;
String Text[]={"R=","G=","B="};
// 表示场景是否已经装入内存中,这在场景非常大而且处于网络传输时比较有用
// 当它为"false"是,所有的动作代码不会执行
boolean isScenceLoading=true ; // Applet的初始化操作,第一个运行的函数
public void init() {
super.init();
setLayout(null);
// Java程序在浏览器中的大小
resize(340,340);
// Java程序在浏览器中的颜色
setBackground(Color.orange);
// 处理三个滑动条
for(int i=0;i<3;i++){
// 变量初始化
scrBar[i]=new Scrollbar(Scrollbar.VERTICAL);
// 加入到浏览器界面中
add(scrBar[i]);
// 变量的大小、位置
scrBar[i].reshape(100+80*i,5,20,160);
// 变量的缺省取值
scrBar[i].setValues(50,0,0,101);
// 以下也是四步操作,变量初始化、加入到浏览器、设置背景颜色、大下位置
labelColor[i]=new Label(Text[i]+scrBar[i].getValue(),Label.LEFT);
add(labelColor[i]);
labelColor[i].setBackground(Color.green);
labelColor[i].reshape(100+80*i,165,40,20);
}
// 变量初始化
labelDemo=new Label("TestColor",Label.CENTER);
add(labelDemo); // 加入到浏览器界面中
// labelDemo变量的大小、位置
labelDemo.reshape(320,70,80,80);
// labelDemo变量的颜色
labelDemo.setBackground(new Color(122,122,122));
} // 在init()完成完成之后的操作
public void start(){
// 判断是否已经将场景装入内存
while(isScenceLoading){
try{
// 获得浏览器的引用
browser=Browser.getBrowser(this);
// 获得场景的材料节点,这一步是处理的依据
myMaterial=(Node)(browser.getNode("ConeColor"));
isScenceLoading=false;
labelDemo.setText("TestColor");
}
catch(Exception e){labelDemo.setText("VRML Loading");}
}
}
// 消息处理,在start()完成之后循环进行的
public boolean handleEvent(Event event) {
// 依次处理三个滑动条
for(int i=0;i<3;i++){
// 判断事件类型(表示仅仅处理这些事件,其余的事件忽略)
// 以及发生事件的滑动条(表示仅仅处理三个滑动条的事件,其余的界面元素上发生的事件被忽略)
if (event.id == Event. SCROLL_LINE_UP && event.target == scrBar[i]) {
setColorLabel(event,i);
return true;
}
else
if (event.id == Event. SCROLL_LINE_DOWN && event.target == scrBar[i]) {
setColorLabel(event,i);
return true;
}
else
if (event.id == Event. SCROLL_ABSOLUTE && event.target == scrBar[i]) {
setColorLabel(event,i);
return true;
}
}
return super.handleEvent(event);
} public void setColorLabel(Event ev,int i) {// i表示第几个滑动条
Color demoColor;
labelColor[i].setText(Text[i]+scrBar[i].getValue());
// 生成新的颜色
demoColor=new Color((int) (2.55*scrBar[0].getValue()),
(int) (2.55*scrBar[1].getValue()),
(int)(2.55*scrBar[2].getValue())
);
// 用新生成的颜色设置labeldemo的背景颜色
labelDemo.setBackground(demoColor);
float value[]=new float[3];
// 将变量和场景中定义的名称关联起来
// 这里关联的颜色---改变场景中物体的diffuse color的属性值
EventInSFColor newColor=(EventInSFColor)myMaterial.getEventIn("set_diffuseColor");
// 生成新的颜色值
for(i=0;i<3;i++)
value[i]=(float) (scrBar[i].getValue()/100f);
// 设置场景的颜色
newColor.setValue(value);
}
}以下是vrml部分
DEF ConeColor Material{
diffuseColor 0 1 0
shininess 1
}
DEF Cone Transform{
children Shape{
appearance Appearance{
material USE ConeColor
}
geometry Cone {
bottomRadius 0.8
height 2.5
}
}
}以下是html部分:
<html><head>
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建网页 1</title>
</head><body bgcolor="#0000FF"><p> </p>
<p align="center"><embed width="437" height="328" src="cone.wrl"></p>
<p align="center"> </p>
<p align="center">
<applet width="553" height="200" code="changecolor.class">
</applet></p></body></html>
现在ie能刷出两个模块却不能把它们连接起来。
我发现java控制台一直在报错。
请高手指点。控制台报错:
Exception in thread "thread applet-changecolor.class-1" java.lang.NoClassDefFoundError: vrml/external/Browser
at changecolor.start(changecolor.java:31)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: vrml.external.Browser
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 3 more
Caused by: java.io.FileNotFoundException: C:\Users\oyyl\Desktop\图形学\教案演示例\5章 VRML和Java交互\1\vrml\external\Browser.class (系统找不到指定的路径。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
... 7 more以下是代码:
java部分:
import java.awt.*;
import java.applet.*;
import vrml.external.Browser;
import vrml.external.Node;
import vrml.external.field. EventInSFColor;
public class changecolor extends Applet {
// 定义三个滑动条,分别表示三种颜色分量的当前值
Scrollbar scrBar[]=new Scrollbar[3];
// 定义三个滑动条的名称
Label labelColor[]=new Label[3];
// 定义一个名称:三个颜色分量的和-真正的颜色
Label labelDemo;
// 定义当前浏览器,在每个交互程序中必须存在的
Browser browser;
// 为了改变场景中的颜色,定义一个场景中物体材料属性节点
// 注意:在VRML中所有的节点都是从Node节点中继承的,所以可以这样定义
Node myMaterial;
String Text[]={"R=","G=","B="};
// 表示场景是否已经装入内存中,这在场景非常大而且处于网络传输时比较有用
// 当它为"false"是,所有的动作代码不会执行
boolean isScenceLoading=true ; // Applet的初始化操作,第一个运行的函数
public void init() {
super.init();
setLayout(null);
// Java程序在浏览器中的大小
resize(340,340);
// Java程序在浏览器中的颜色
setBackground(Color.orange);
// 处理三个滑动条
for(int i=0;i<3;i++){
// 变量初始化
scrBar[i]=new Scrollbar(Scrollbar.VERTICAL);
// 加入到浏览器界面中
add(scrBar[i]);
// 变量的大小、位置
scrBar[i].reshape(100+80*i,5,20,160);
// 变量的缺省取值
scrBar[i].setValues(50,0,0,101);
// 以下也是四步操作,变量初始化、加入到浏览器、设置背景颜色、大下位置
labelColor[i]=new Label(Text[i]+scrBar[i].getValue(),Label.LEFT);
add(labelColor[i]);
labelColor[i].setBackground(Color.green);
labelColor[i].reshape(100+80*i,165,40,20);
}
// 变量初始化
labelDemo=new Label("TestColor",Label.CENTER);
add(labelDemo); // 加入到浏览器界面中
// labelDemo变量的大小、位置
labelDemo.reshape(320,70,80,80);
// labelDemo变量的颜色
labelDemo.setBackground(new Color(122,122,122));
} // 在init()完成完成之后的操作
public void start(){
// 判断是否已经将场景装入内存
while(isScenceLoading){
try{
// 获得浏览器的引用
browser=Browser.getBrowser(this);
// 获得场景的材料节点,这一步是处理的依据
myMaterial=(Node)(browser.getNode("ConeColor"));
isScenceLoading=false;
labelDemo.setText("TestColor");
}
catch(Exception e){labelDemo.setText("VRML Loading");}
}
}
// 消息处理,在start()完成之后循环进行的
public boolean handleEvent(Event event) {
// 依次处理三个滑动条
for(int i=0;i<3;i++){
// 判断事件类型(表示仅仅处理这些事件,其余的事件忽略)
// 以及发生事件的滑动条(表示仅仅处理三个滑动条的事件,其余的界面元素上发生的事件被忽略)
if (event.id == Event. SCROLL_LINE_UP && event.target == scrBar[i]) {
setColorLabel(event,i);
return true;
}
else
if (event.id == Event. SCROLL_LINE_DOWN && event.target == scrBar[i]) {
setColorLabel(event,i);
return true;
}
else
if (event.id == Event. SCROLL_ABSOLUTE && event.target == scrBar[i]) {
setColorLabel(event,i);
return true;
}
}
return super.handleEvent(event);
} public void setColorLabel(Event ev,int i) {// i表示第几个滑动条
Color demoColor;
labelColor[i].setText(Text[i]+scrBar[i].getValue());
// 生成新的颜色
demoColor=new Color((int) (2.55*scrBar[0].getValue()),
(int) (2.55*scrBar[1].getValue()),
(int)(2.55*scrBar[2].getValue())
);
// 用新生成的颜色设置labeldemo的背景颜色
labelDemo.setBackground(demoColor);
float value[]=new float[3];
// 将变量和场景中定义的名称关联起来
// 这里关联的颜色---改变场景中物体的diffuse color的属性值
EventInSFColor newColor=(EventInSFColor)myMaterial.getEventIn("set_diffuseColor");
// 生成新的颜色值
for(i=0;i<3;i++)
value[i]=(float) (scrBar[i].getValue()/100f);
// 设置场景的颜色
newColor.setValue(value);
}
}以下是vrml部分
DEF ConeColor Material{
diffuseColor 0 1 0
shininess 1
}
DEF Cone Transform{
children Shape{
appearance Appearance{
material USE ConeColor
}
geometry Cone {
bottomRadius 0.8
height 2.5
}
}
}以下是html部分:
<html><head>
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建网页 1</title>
</head><body bgcolor="#0000FF"><p> </p>
<p align="center"><embed width="437" height="328" src="cone.wrl"></p>
<p align="center"> </p>
<p align="center">
<applet width="553" height="200" code="changecolor.class">
</applet></p></body></html>
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货