Вопрос по java – Ошибка ограничения доступа в моем коде Java

5

я пытаюсь захватить изображение с моей веб-камеры, но я получил ошибку в моем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 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.*;
Где баночка сcom.sun.image.codec.jpeg пакет? 11684
Вы используете Eclipse? Некоторое время назад у меня тоже было что-то подобное, но это была ошибка Eclipse (в индиго текущая версия Juno получила исправление для этого). 11684
@ 11684 яиспользуя Eclipse Juno Lucas_Santos
@ 11684 Я думал, что это ссылка на файл с банкой от Sun Lucas_Santos
Да, но он все еще находится в файле jar ... Возможно, он находится внутри JVM (на Mac я вижу банки внутри), но он может быть где-то еще или позже загружен. 11684

Ваш Ответ

2   ответа
14

Java-компилятор Eclipse пытается запретить вам использование непубличных API. В классической Java концепция видимости довольно примитивна, и поэтому разработчикам библиотек часто приходится помещать классы публичного пространства, созданные исключительно для внутреннего использования. Это не относится к более развитым средам, таким как OSGi.

Если вы все еще хотите получить доступ к этому классу, вы можете сделать, как описано вэтот блог

10

Я смог избавиться от этой ошибки, следуя предложению:

Откройте свойства проекта.Выберите узел Java Build Path.Выберите вкладку «Библиотеки».Удалить системную библиотеку JRE.Добавить библиотеку Системная библиотека JRE.
Спасибо вам, это работает! Cheung

Похожие вопросы