Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Access restriction error on my Java Code

Tags:

java

I'm trying to capture the image from my webcam, but I got the error in my saveJPG method.

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

This error occurs in my saveJPG method in the line where I have

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

IMPORTS:

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.*;
like image 642
Lucas_Santos Avatar asked Sep 24 '12 18:09

Lucas_Santos


2 Answers

The Eclipse Java compiler attempts to prevent you from using non-public APIs. In classic Java, the visibility concept is quite primitive and therefore library designers often have to put in the public space classes solely created for internal use. This is not the case with more evolved frameworks such as OSGi.

If you still want to access this class, you can do as described in this blog post.

like image 100
S. Cambon Avatar answered Sep 27 '22 00:09

S. Cambon


I was able to get rid of this error by following the suggestion:

  1. Open project properties.
  2. Select Java Build Path node.
  3. Select Libraries tab.
  4. Remove JRE System Library.
  5. Add Library JRE System Library.
like image 44
user2542398 Avatar answered Sep 23 '22 00:09

user2542398