2012-09-24 20 views
5

私のウェブカメラから画像をキャプチャしようとしていますが、私のsaveJPGメソッドでエラーが発生しました。Javaコードのアクセス制限エラー

ERROR:

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ビルドパス]ノードを選択します。
  3. [ライブラリ]タブを選択します。
  4. JREシステムライブラリを削除します。
  5. ライブラリJREシステムライブラリを追加します。
+1

ありがとう、それは作品です! – Cheung

関連する問題