2012-09-24 32 views
5

我試圖從我的網絡攝像頭捕獲圖像,但在saveJPG方法中出現錯誤。我的Java代碼訪問限制錯誤

錯誤:

Multiple markers at this line 
    - Access restriction: The type JPEGCodec is not accessible due to restriction on required library C:\Program Files\Java\jre7\lib\rt.jar 
    - Access restriction: The method createJPEGEncoder(OutputStream) from the type JPEGCodec is not accessible due to restriction on required library C: 
    \Program Files\Java\jre7\lib\rt.jar 
    - Access restriction: The type JPEGImageEncoder is not accessible due to restriction on required library C:\Program Files\Java\jre7\lib\rt.jar 

在我saveJPG方法發生在我行此錯誤

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi); 
param.setQuality(0.5f,false); 
encoder.setJPEGEncodeParam(param);  

CODE:

JButton startC = new JButton("Capturar"); 
    startC.setPreferredSize(new Dimension(100,22)); 

    startC.addActionListener(new ActionListener() 
      { 

       @Override 
       public void actionPerformed(ActionEvent e) 
       {     
         // 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,"c:\\test.jpg"); 
       } 
      });  



    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");  
      } 
      } 

個進口:

import static com.googlecode.javacv.jna.highgui.cvCreateCameraCapture; 
import static com.googlecode.javacv.jna.highgui.cvGrabFrame; 
import static com.googlecode.javacv.jna.highgui.cvReleaseCapture; 
import com.googlecode.javacv.CanvasFrame; 
import com.googlecode.javacv.FrameGrabber; 
import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.image.BufferedImage; 
import java.io.BufferedInputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.Enumeration; 
import java.util.List; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipFile; 
import javax.swing.JApplet; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JComponent; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import com.colorfulwolf.webcamapplet.gui.LabelPanel; 
import com.colorfulwolf.webcamapplet.gui.LoadingScreen; 
import com.googlecode.javacv.jna.highgui.CvCapture; 
import java.awt.BorderLayout; 
import javax.media.*; 
import javax.media.protocol.*; 
import javax.media.util.BufferToImage; 
import javax.swing.*; 
import java.awt.*; 
import java.util.*; 
import javax.media.control.*; 
import javax.media.format.*; 
import com.sun.image.codec.jpeg.*; 
+0

您使用的是Eclipse嗎?前一段時間,我也有類似的東西,但那是一個Eclipse錯誤(在靛藍中,目前的版本Juno爲此得到了修復)。 – 11684

+0

@ 11684我正在使用Eclipse Juno –

+0

包含'com.sun.image.codec.jpeg'包的jar在哪裏? – 11684

回答

13

Eclipse Java編譯器試圖阻止你使用非公開的API。 在經典的Java中,可見性概念相當簡陋,因此庫設計人員通常必須將公共空間類放入純粹爲內部使用而創建的類中。 OSGi等更多演化框架並非如此。

如果您還想訪問此課程,請按照this blog post中的說明進行操作。

10

我能夠通過的建議下襬脫這種錯誤的:

  1. 打開項目屬性。
  2. 選擇Java Build Path節點。
  3. 選擇庫選項卡。
  4. 刪除JRE系統庫。
  5. 添加庫JRE系統庫。
+1

謝謝你,這是作品! – Cheung