我的Java代码访问限制错误

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

错误:

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

码:

 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:

 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之类的更进化的框架,情况并非如此。

如果您仍想访问此课程,可以按照此博客文章中的说明进行操作 。

通过遵循以下建议,我能够摆脱这个错误:

  1. 打开项目属性。
  2. 选择Java Build Path节点。
  3. 选择“库”选项卡。
  4. 删除JRE系统库。
  5. 添加库JRE系统库。