我的Java代码访问限制错误 [英] Access restriction error on my Java Code

查看:113
本文介绍了我的Java代码访问限制错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从我的网络摄像头捕获图像,但是我的 saveJPG 方法出错。

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

错误:

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

我的<$ p $ c> saveJPG 方法中出现此错误

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

代码:

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.*;


推荐答案

Eclipse Java编译器试图阻止你使用非 - 公共API。
在经典Java中,可见性概念非常原始,因此库设计者通常必须放入仅供内部使用的公共空间类。
对于OSGi等更多进化框架,情况并非如此。

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.

这篇关于我的Java代码访问限制错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆