JMF的摄像头Applet无法运行的问题?

yanqlv 2005-09-16 10:44:17
在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=null

java.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)

??
...全文
68 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yanqlv 2005-09-17
多谢,问题找到了。
是Windows 2k的问题,
在Windows XP下一切OK,
不过还是谢谢,你的QQ我加了,多交流
回复
ruowang 2005-09-17
如果不行的话
再联系 我这有好几个视频捕捉的程序
QQ:258207986
回复
ruowang 2005-09-17
没看见你的程序前面是怎么写的 ,你根据下面这个改改吧。这个是我调试过的
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");
}
}
}
回复
kulapca 2005-09-17
up
回复
相关推荐
发帖
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2005-09-16 10:44
社区公告
暂无公告