首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用java 6环境编译java 7项目

如何用java 6环境编译java 7项目
EN

Stack Overflow用户
提问于 2021-01-19 11:19:51
回答 2查看 70关注 0票数 0

我正试图为处理摄像头制作一个jar文件。我必须将这个jar用于另一个应用程序。但是这个应用程序是由java 1.6创建的,所以我必须将这个jar转换为1.6。这段代码适用于java 8。当我试图用java 1.6编译它时,它给出了以下错误

代码语言:javascript
复制
Updating property file: F:\Core Java\Camera\build\built-jar.properties
Compiling 1 source file to F:\Core Java\Camera\build\classes
compile-single:
run-single:
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/github/sarxos/webcam/WebcamPanel : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at ati.com.camera.CaptureImageMP.main(CaptureImageMP.java:53)
Java Result: 1

请告诉我如何用java1.6运行这个项目

这是捕获图像的代码。

公共类CaptureImageMP扩展VBean {

代码语言:javascript
复制
private IHandler mHandler;
private Main formsMain;
protected static final ID VN_NO = ID.registerProperty("VN_NO");

@Override
public void init(IHandler handler) {
    mHandler = handler;
    super.init(handler);
    formsMain = (Main) mHandler.getApplet();
}

@Override
public boolean setProperty(ID _ID, Object _args) {

    System.out.println("Method Called");
    if (_ID == VN_NO) {
        System.out.println("Got VN No" + VN_NO);
        System.out.println("Got _ID No" + _ID);
        if (_args != null) {
            System.out.println("Got parameter :" + _args);
            try {
             new TakeSnapshotFromVideoExample();
            } catch (Exception ex) {
                System.out.println("Exception: " + ex);
                return false;
            }
        }

        return true;
    }

    //return true;
    return super.setProperty(_ID, _args);
}
public static void main(String[] args) throws InterruptedException {
    new TakeSnapshotFromVideoExample();
          //  Thread.sleep(1000);
          //  new Game1();
}

这是捕捉图像和开/关相机用户界面的代码。

@SuppressWarnings(“串行”)公共类TakeSnapshotFromVideoExample扩展JFrame {

代码语言:javascript
复制
private class SnapMeAction extends AbstractAction {

    public SnapMeAction() {
                
        super("Snapshot");
            }

    @Override
    public void actionPerformed(ActionEvent e) {
            //    int unique_id= (int) ((new Date().getTime() / 1000L) % Integer.MAX_VALUE); 
          int unique_id= (int) (Integer.MAX_VALUE); 
        try {
            for (int i = 0; i < webcams.size(); i++) {
                Webcam webcam = webcams.get(i);
                //File file = new File(String.format("Image\\"+unique_id+".jpg", i));
                                    File file = new File(String.format("F:\\Core Java\\camera\\ATILimitedRegImage\\"+unique_id+".jpg", i));
                ImageIO.write(webcam.getImage(), "JPG", file);
                System.out.format("Image for %s saved in %s \n", webcam.getName(), file);
            }
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
}

private class StartAction extends AbstractAction implements Runnable {

    public StartAction() {
        super("Start");
    }

    @Override
    public void actionPerformed(ActionEvent e) {

        btStart.setEnabled(false);
        btSnapMe.setEnabled(true);

        // remember to start panel asynchronously - otherwise GUI will be
        // blocked while OS is opening webcam HW (will have to wait for
        // webcam to be ready) and this causes GUI to hang, stop responding
        // and repainting

        executor.execute(this);
    }

    @Override
    public void run() {

        btStop.setEnabled(true);

        for (WebcamPanel panel : panels) {
            panel.start();
        }
    }
}

private class StopAction extends AbstractAction {

    public StopAction() {
        super("Stop");
    }

    @Override
    public void actionPerformed(ActionEvent e) {

        btStart.setEnabled(true);
        btSnapMe.setEnabled(false);
        btStop.setEnabled(false);

        for (WebcamPanel panel : panels) {
            panel.stop();
        }
    }
}

private Executor executor = Executors.newSingleThreadExecutor();

//private Dimension size = WebcamResolution.QQVGA.getSize();
    private Dimension size = WebcamResolution.VGA.getSize();

private List<Webcam> webcams = Webcam.getWebcams();
private List<WebcamPanel> panels = new ArrayList<WebcamPanel>();

private JButton btSnapMe = new JButton(new SnapMeAction());
private JButton btStart = new JButton(new StartAction());
private JButton btStop = new JButton(new StopAction());

public TakeSnapshotFromVideoExample() {

    super("Test Snap Different Size");

    for (Webcam webcam : webcams) {
        webcam.setViewSize(size);
        WebcamPanel panel = new WebcamPanel(webcam, size, false);
        //panel.setFPSDisplayed(true);
        panel.setFillArea(true);
        panels.add(panel);
    }

    // start application with disable snapshot button - we enable it when
    // webcam is started

    btSnapMe.setEnabled(false);
    btStop.setEnabled(false);

    setLayout(new FlowLayout());

    for (WebcamPanel panel : panels) {
        add(panel);
    }

    add(btSnapMe);
    add(btStart);
    add(btStop);

    pack();
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
    new TakeSnapshotFromVideoExample();
}

注意:我正在使用Netbeans

EN

回答 2

Stack Overflow用户

发布于 2021-01-29 04:56:18

使用的类文件格式的主版本号。 Java 17 = 61 (0x3D十六进制), Java SE 16 = 60 (0x3C十六进制), Java SE 15 = 59 (0x3B十六进制), Java SE 14 = 58 (0x3A十六进制), Java SE 13 = 57 (0x39十六进制), Java SE 12 = 56 (0x38十六进制), Java SE 11 = 55 (0x37十六进制), Java SE 10 = 54 (0x36十六进制), Java SE 9= 53 (0x35十六进制), Java SE 8= 52 (0x34十六进制), Java SE 7= 51 (0x33十六进制), Java SE 6.0 = 50 (0x32十六进制), Java SE 5.0 = 49 (0x31十六进制), JDK 1.4 = 48 (0x30六角), JDK 1.3 = 47 (0x2F十六进制), JDK 1.2 = 46 (0x2E十六进制), JDK 1.1 = 45 (0x2D十六进制)。

资料来源:维基百科

错误信息分析

基于错误消息com/github/sarxos/webcam/WebcamPanel : Unsupported major.minor version 51.0

  1. 有一些类(Jars)被编译成目标1.7
  2. 当与小于1.7的JRE一起使用时,它将导致51.0 error

一些猜测

假设您使用的是从这个回购github:sarxos生成的jars (同样基于错误消息),

  1. 此回购协议被编译为目标1.7
  2. 作者可能使用1.7语言特性。
  3. 作者可能期望他的jar用户在1.7和更高版本上运行

选项

如果假设到目前为止是正确的,那么可能的选择是

  1. 将运行时升级到-至少1.7
  2. 编译所有源(包括带有目标1.6的传递jars的源)-假设我们可以访问这些源
  3. 尝试使用一些复古字节码修饰符实用程序

1.升级

如果升级是一种选择,那么请升级到1.7(建议升级到1.8甚至11),因为对于企业应用程序来说,对所有依赖源进行目标1.6编译比升级到1.8(或更高版本)所需的工作量太大。

2.编译针对1.6的源代码

如果不可能升级,那么如果使用了这个外部jar,那么

  1. 回购(或结帐)*(请检查作者的许可),
  2. 将分叉回购编译为目标1.6
  3. 将此jar包含在应用程序中,并将应用程序编译为目标1.6
  4. 将这个完全编译的1.6目标jar部署到1.6运行时

3.一些字节码魔术

我的知识非常有限,不能提出任何具体的建议。您可以签出这个回购

票数 1
EN

Stack Overflow用户

发布于 2021-01-19 11:25:03

库要求您在JDK 1.6或版本1.6中编译这些类

在编译时,使用源代码和目标版本,如下所示。如果有用的话请告诉我。

javac -source 1.6 -target 1.6

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65790491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档