2012-02-23 61 views
0

我有一個簡單的應用程序,它打開網絡攝像頭並將實時動態顯示在屏幕上。如果用戶點擊圖像,那麼該框架會在硬盤中保存一個.png。但問題是應用程序第一次正常運行。但是,當我重新啓動它失敗Java webcam應用程序一直在後臺運行

邁倫BETA 2.4

# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x003744a0, pid=5688, tid=1328 
# 
# JRE version: 7.0_02-b13 
# Java VM: Java HotSpot(TM) Client VM (22.0-b10 mixed mode, sharing windows-x86) 
# Problematic frame: 
# C [myron_ezcam.dll+0x44a0] 
# 
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows 
# 
# An error report file with more information is saved as: 
# F:\javacode\libraries\webcam\JMyron0025\JMyron_SimpleCamera_Eclipse\JMyron_SimpleCamera\hs_err_pid5688.log 
# 
# If you would like to submit a bug report, please visit: 
# http://bugreport.sun.com/bugreport/crash.jsp 
# The crash happened outside the Java Virtual Machine in native code. 
# See problematic frame for where to report the bug. 
# 

我使用邁倫這裏是我的代碼

import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.Timer; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import JMyron.*; 

public class SimpleCamera extends JFrame 
{ 
    JMyron m;//a camera object 
    int width = 320; 
    int height = 240; 
    VideoPane vp; 
    int frameRate = 15; //fps 

    public static void main(String[] args) 
    { 
     SimpleCamera sc = new SimpleCamera("0021"); 
     sc.setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
    } 

    public SimpleCamera(final String id) 
    { 
     setSize(width,height); 
     m = new JMyron();//make a new instance of the object 
     m.start(width,height);//start a capture at 320x240 
     m.findGlobs(1);//disable the intelligence to speed up frame rate 
     System.out.println("Myron " + m.version()); 

     final Timer videoTimer = new Timer(1000/frameRate, new ActionListener() 
     { 
      public void actionPerformed(ActionEvent evt) 
      { 
       vp.repaint(); 
      } 

     }); 

     vp = new VideoPane(); 
     vp.addMouseListener(new MouseListener() { 

      @Override 
      public void mouseClicked(MouseEvent arg0) { 
       File file = new File("E:\\"+id+".png"); 

       BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 
       int[] img = m.image(); //get the normal image of the camera 
       bi.setRGB(0,0,width,height,img,0,width); 
       try { 
        ImageIO.write(bi, "png",file); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

       System.out.println("Click"); 
       videoTimer.stop(); 
       setVisible(false); 
       setEnabled(false); 
       m.stop(); 


      } 

      @Override 
      public void mouseEntered(MouseEvent e) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void mouseExited(MouseEvent e) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void mousePressed(MouseEvent e) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void mouseReleased(MouseEvent e) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     getContentPane().add(vp);  

     videoTimer.start();  
     setVisible(true); 
     setEnabled(true); 


    } 

    class VideoPane extends JComponent 
    { 
     BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 

     public void paint(Graphics g) 
     { 
      m.update();//update the camera view 
      int[] img = m.image(); //get the normal image of the camera 
      bi.setRGB(0,0,width,height,img,0,width); 
      g.drawImage(bi, 0, 0, width, height, this); 
     } 
    } 
} 

我可以看到一個javaw進程保持在進程管理器運行。這可能意味着我有一些進程運行,因爲我終止了Windows任務管理器的進程,我可以正常運行程序。請幫助我真正卡在最後期限。

回答

0
public SimpleCamera(final String id) { 
    setSize(width,height); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //add this line where above line present in your code 
} 
+1

只包含沒有解釋代碼的答案不是很有用。 – svick 2012-07-22 15:55:06