java怎么与摄像头连接不上_访问网络摄像头时遇到问题

我用Java编写代码来访问网络摄像头,并保存图像...我得到以下例外:SwingCapture中的线程“main”java.lang.NullPointerException异常 . (SwingCapture.java:40)SwingCapture.main( SwingCapture.java:66)

如何删除此异常 .

这是代码:

import javax.swing.*;

import javax.swing.event . ; import java.io . ; import javax.media . ; import javax.media.format . ; import javax.media.util . ; import javax.media.control . ; import javax.media.protocol . ; import java.util . ; import java.awt . ; import java.awt.image . ; import java.awt.event . ; import com.sun.image.codec.jpeg . ;

公共类SwingCapture扩展Panel实现ActionListener {public static Player player = null; public CaptureDeviceInfo di = null; public MediaLocator ml = null; public JButton capture = null; public Buffer buf = null; public Image img = null; public VideoFormat vf = null; public BufferToImage btoi = null; public ImagePanel imgpanel = null;

public SwingCapture(){setLayout(new BorderLayout());的setSize(320550);

imgpanel = new ImagePanel();

capture = new JButton("Capture");

capture.addActionListener(this);

String str1 = "vfw:iNTEX IT-308 WC: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);

}

add(capture,BorderLayout.CENTER);

add(imgpanel,BorderLayout.SOUTH);

}

catch (Exception e)

{

e.printStackTrace();

}

}

public static void main(String [] args){Frame f = new Frame(“SwingCapture”); SwingCapture cf = new SwingCapture();

f.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

playerclose();

System.exit(0);}});

f.add("Center",cf);

f.pack();

f.setSize(new Dimension(320,550));

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

saveJPG(img,"\test.jpg");

}

}

class ImagePanel扩展Panel {public Image myimg = null;

public ImagePanel()

{

setLayout(null);

setSize(320,240);

}

public void setImage(Image img)

{

this.myimg = img;

repaint();

}

public void paint(Graphics g)

{

if (myimg != null)

{

g.drawImage(myimg, 0, 0, this);

}

}

}

public static void saveJPG(Image img,String s){BufferedImage bi = new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bi.createGraphics(); g2.drawImage(img,null,null);

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(0.5f,false);

encoder.setJPEGEncodeParam(param);

try

{

encoder.encode(bi);

out.close();

}

catch (java.io.IOException io)

{

System.out.println("IOException");

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值