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)

??
...全文
100 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧