我这有一个关于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>