2012-05-16 166 views
0

我想通過java拍攝網絡攝像頭的快照。我跟着this question到達了這example。但有從下面的線來一個空指針異常 -使用JMF從網絡攝像頭拍攝快照

Buffer buf = frameGrabber.grabFrame(); 
Image img = (new BufferToImage((VideoFormat) buf.getFormat()) 
       .createImage(buf)); 
     buffImg = new BufferedImage(img.getWidth(this), img.getHeight(this), 
       BufferedImage.TYPE_INT_RGB); 

通過我觀察到的緩衝實際上並不包含數據的調試器。所以我去創建frameGrabber。

frameGrabber = (FrameGrabbingControl) player 
       .getControl("javax.media.control.FrameGrabbingControl"); 

這段代碼有問題嗎?由於JMFStudio在我的機器上正常工作,但代碼無法訪問它。謝謝。

+1

*「異常來自下面的行」*我計數3行。爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)和堆棧跟蹤。 –

回答

1

我找到了解決方案。 JMF需要時間進行初始化。在這個例子中,我們必須切換一行。把

new Timer(3000, this).start(); 

低於try catch。

整個模塊如下所示。

 try { 
      player = Manager.createRealizedPlayer(cdi.getLocator()); 
      player.start(); 
     } catch (NoPlayerException e) { 
      e.printStackTrace(); 
     } catch (CannotRealizeException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
      new Timer(3000, this).start(); 
     // Grab a frame from the capture device 
     frameGrabber = (FrameGrabbingControl) player 
       .getControl("javax.media.control.FrameGrabbingControl"); 
相關問題