在Application的时候运行很好,
可是一改成applet,
就在这个地方出错:(加******的地方),
用过的高手请帮忙看一下是什么问题,
我已经排除了由于applet 的安全问题,
我把安全设置为AllPermission
因为/* test applet security */
/* test end */之间的部分能够正常对本地文件进行操作。.....
        String str1 = "vfw:Logitech USB Video Camera:0";
        String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
        di = CaptureDeviceManager.getDevice(str2);
        /* test applet security */
        try{
            java.io.File existDir = new java.io.File("e:/empty");
            java.io.File newFile = new java.io.File("e:/testforjava");
            System.out.println("existDir.delete()="+existDir.delete());
            System.out.println("newFile.createNewFile()="+newFile.createNewFile());        }catch(Exception e){
            System.out.println("file delete exception:"+e);
            e.printStackTrace();
        }
        /* test end */          
        System.out.println("di="+di);///**************** di=null**************
        ml = di.getLocator();///**************** exception throw here**************
        try
        {
            player = Manager.createRealizedPlayer(ml);
            player.start();
            Component comp;
            if ((comp = player.getVisualComponent()) != null)
            {
                add(comp, BorderLayout.NORTH);
            }
            Panel panel1 = new Panel(new BorderLayout());
            panel1.add(capture, BorderLayout.NORTH);
            panel1.add(new Label("请输入对应的文件名:"), BorderLayout.WEST);
            panel1.add(num, BorderLayout.CENTER);
            panel1.add(save, BorderLayout.SOUTH);
            add(panel1, BorderLayout.CENTER);
            add(imgpanel, BorderLayout.SOUTH);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
.....错误提示:
di=nulljava.lang.NullPointerException at CamApplet.<init>(CamApplet.java:96) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at sun.applet.AppletPanel.createApplet(Unknown Source) at sun.plugin.AppletViewer.createApplet(Unknown Source) at sun.applet.AppletPanel.runLoader(Unknown Source) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source)??

解决方案 »

  1.   

    没看见你的程序前面是怎么写的 ,你根据下面这个改改吧。这个是我调试过的
    import javax.swing.*;
    import java.io.*;
    import javax.media.*;
    import javax.media.format.*;
    import javax.media.util.*;
    import javax.media.control.*;import java.applet.Applet;
    import java.awt.*;
    import java.awt.image.*;
    import java.awt.event.*;import com.sun.image.codec.jpeg.*;
    public class WebCang extends JApplet implements ActionListener
    {
        public static Player player = null;
        private CaptureDeviceInfo di = null;
        private MediaLocator ml = null;
        /**
         * 瞻钮
         */
        private JButton capture = null;
        /**
         * 姘磁?
         */
        private JButton save = null;
        private JTextField num = null;
        private Buffer buf = null;
        private Image img = null;
        //private VideoFormat vf = null;
        private BufferToImage btoi = null;
        private ImagePanel imgpanel = null;    /**
         * 选取x,y,width,height默值
         */
        private int rectX;
        private int rectY;
        private int rectWidth = 150;
        private int rectHeight = 200;
        private int imgWidth = 320;
        private int imgHeight = 240;
        /**
         * 默媳募
         */
        private String fname = "test";    public WebCang()
        {
            setLayout(new BorderLayout());
            setSize(320, 550);        imgpanel = new ImagePanel();
            imgpanel.addMouseMotionListener(imgpanel);
            capture = new JButton("");
            capture.addActionListener(this);
            save = new JButton("");
            save.addActionListener(this);
            num = new JTextField();        String str1 = "vfw:Logitech USB Video Camera:0";
            String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
            di = CaptureDeviceManager.getDevice(str2);
            ml = di.getLocator();
            try
            {
                player = Manager.createRealizedPlayer(ml);
                player.start();
                Component comp;
                if ((comp = player.getVisualComponent()) != null)
                {
                    add(comp, BorderLayout.NORTH);
                }
                Panel panel1 = new Panel(new BorderLayout());
                panel1.add(capture, BorderLayout.NORTH);
                panel1.add(new Label("应募:"), BorderLayout.WEST);
                panel1.add(num, BorderLayout.CENTER);
                panel1.add(save, BorderLayout.SOUTH);
                add(panel1, BorderLayout.CENTER);
                add(imgpanel, BorderLayout.SOUTH);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }    public static void main(String[] args)
        {
            JFrame f = new JFrame("--窕埃");
          //  Frame f = new Frame("殖粘 BCU WebCam Application");
            WebCang cf = new WebCang();
            f.addWindowListener(new WindowAdapter()
            {
                public void windowClosing(WindowEvent e)
                {
                    playerclose();
                    System.exit(0);
                }
            });
            f.add("Center", cf);
            f.pack();
            f.setSize(new Dimension(320, 590));
            f.setVisible(true);
        }
        /**
         * 乇头
         *
         */
        public static void playerclose()
        {
            player.close();
            player.deallocate();
        }
        /**
         * 
         */
        public void actionPerformed(ActionEvent e)
        {
            JComponent c = (JComponent) e.getSource();
            if (c == capture)
            { // Grab a frame      
                FrameGrabbingControl fgc =
                    (FrameGrabbingControl) player.getControl(
                        "javax.media.control.FrameGrabbingControl");
                buf = fgc.grabFrame(); // Convert it to an image      
                btoi = new BufferToImage((VideoFormat) buf.getFormat());
                img = btoi.createImage(buf); // show the image     
                imgpanel.setImage(img); // save image
            }
            else if (c == save)
            {
                if (img != null)
                {
                    fname = !num.getText().equals("") ? num.getText() : "test";
                    saveJPG(img, "Photo/" + fname + ".jpg");
                }
            }
        }
        /**
         * 珊示片隙围选要取牟
         */
        class ImagePanel extends Panel implements MouseMotionListener
        {
            private Image myimg = null;        public ImagePanel()
            {
                setLayout(null);
                setSize(imgWidth, imgHeight);
            }
            public void setImage(Image img)
            {
                this.myimg = img;
                repaint();
            }
            public void update(Graphics g)
            {
                g.clearRect(0, 0, getWidth(), getHeight());
                if (myimg != null)
                {
                    g.drawImage(myimg, 0, 0, this);
                    g.setColor(Color.RED);
                    g.drawRect(rectX, rectY, rectWidth, rectHeight);
                }
            }
            public void paint(Graphics g)
            {
                update(g);
            }        public void mouseDragged(MouseEvent e)
            {
                rectX = e.getX() - 50;
                rectY = e.getY() - 50;
                repaint();
            }        public void mouseMoved(MouseEvent e)
            {
            }
        }
        /**
         * 图
         * @param img
         * @param s
         */
        public void saveJPG(Image img, String s)
        {
            BufferedImage bi = (BufferedImage) createImage(imgWidth, imgHeight);
            /*BufferedImage bi =
                new BufferedImage(
                    img.getWidth(null),
                    img.getHeight(null),
                    BufferedImage.TYPE_INT_RGB);*/        Graphics2D g2 = bi.createGraphics();
            g2.clipRect(rectX, rectY, rectWidth, rectHeight);
            g2.drawImage(img, null, null);
            int moveX = rectX > 0 ? rectX : 0;
            int moveY = rectY > 0 ? rectY : 0;
            int cutWidth =
                rectX + rectWidth > imgWidth
                    ? rectWidth - ((rectX + rectWidth) - imgWidth)
                    : rectWidth;
            int cutHeight =
                rectY + rectHeight > imgHeight
                    ? rectHeight - ((rectY + rectHeight) - imgHeight)
                    : rectHeight;
            bi = bi.getSubimage(moveX, moveY, cutWidth, cutHeight);        FileOutputStream out = null;
            try
            {
                out = new FileOutputStream(s);
            }
            catch (java.io.FileNotFoundException io)
            {
                System.out.println("File Not Found");
            }
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
            param.setQuality(1f, false);
            encoder.setJPEGEncodeParam(param);
            try
            {
                encoder.encode(bi);
                out.close();
            }
            catch (java.io.IOException io)
            {
                System.out.println("IOException");
            }
        }
    }
      

  2.   

    多谢,问题找到了。
    是Windows 2k的问题,
    在Windows XP下一切OK,
    不过还是谢谢,你的QQ我加了,多交流