2012-09-24 12 views
5

Sto cercando di acquisire l'immagine dalla mia webcam, ma ho ricevuto l'errore nel mio metodo saveJPG.Errore di restrizione di accesso sul mio codice Java

ERRORE:

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 

Questo errore si verifica nel mio metodo saveJPG nella linea in cui ho

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

CODICE:

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

IMPORTAZIONI:

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

Stai usando Eclipse? Qualche tempo fa avevo anche qualcosa di simile, ma quello era un bug di Eclipse (in indigo, la versione corrente di Juno aveva una soluzione per questo). – 11684

+0

@ 11684 Utilizzo Eclipse Juno –

+0

Dov'è il contenitore contenente il pacchetto 'com.sun.image.codec.jpeg'? – 11684

risposta

13

The Eclipse Java compilatore tenta di impedirvi di utilizzare le API non pubbliche. In Java classico, il concetto di visibilità è piuttosto primitivo e quindi i progettisti di librerie spesso devono inserire classi di spazio pubbliche create esclusivamente per uso interno. Questo non è il caso di framework più evoluti come OSGi.

Se si desidera continuare ad accedere a questo corso, è possibile procedere come descritto in this blog post.

10

sono stato in grado di sbarazzarsi di questo errore, seguendo il suggerimento:

  1. Aperte proprietà del progetto.
  2. Selezionare il nodo Percorso di costruzione Java.
  3. Selezionare la scheda Librerie.
  4. Rimuovere la libreria di sistema JRE.
  5. Aggiungi libreria Libreria di sistema JRE.
+1

Grazie, è un lavoro! – Cheung

Problemi correlati