0

这是 ImageTest 文件的修改版本,它将图像类嵌入到主类中并产生 InstantiationException。我想知道为什么会抛出这个运行时异常,以及是否可以在不将内部类拆分为单独的文件的情况下解决它...

/*
 * Copyright (C) 2009-2010 Wilfred Springer
 *
 * This file is part of Preon.
 *
 * Preon is free software; you can redistribute it and/or modify it under the
 * terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2, or (at your option) any later version.
 *
 * Preon is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * Preon; see the file COPYING. If not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Linking this library statically or dynamically with other modules is making a
 * combined work based on this library. Thus, the terms and conditions of the
 * GNU General Public License cover the whole combination.
 *
 * As a special exception, the copyright holders of this library give you
 * permission to link this library with independent modules to produce an
 * executable, regardless of the license terms of these independent modules, and
 * to copy and distribute the resulting executable under terms of your choice,
 * provided that you also meet, for each linked independent module, the terms
 * and conditions of the license of that module. An independent module is a
 * module which is not derived from or based on this library. If you modify this
 * library, you may extend this exception to your version of the library, but
 * you are not obligated to do so. If you do not wish to do so, delete this
 * exception statement from your version.
 */

import org.codehaus.preon.Codecs;
import org.codehaus.preon.Codec;
import org.codehaus.preon.DecodingException;
import org.codehaus.preon.annotation.BoundList;
import org.codehaus.preon.annotation.BoundNumber;
import org.codehaus.preon.buffer.ByteOrder;
import org.codehaus.preon.el.ImportStatic;

public class EmbeddedImageRunTimeTest {

    public class EmbeddedImage {

        @BoundNumber(byteOrder = ByteOrder.BigEndian)
        private int height;

        @BoundNumber(byteOrder = ByteOrder.BigEndian)
        private int width;

        @BoundList(size = "height*width")
        private Color[] pixels;

        public int getHeight() {
            return height;
        }

        public int getWidth() {
            return width;
        }

        public Color[] getPixels() {
            return pixels;
        }

    }

    public static void main(String[] args) throws DecodingException {
        Codec<EmbeddedImage> codec = Codecs.create(EmbeddedImage.class);
        byte[] buffer = new byte[]{
                0, 0, 0, 1,
                0, 0, 0, 1,
                1, 2, 3
        };
        EmbeddedImage image = Codecs.decode(codec, buffer);
        System.out.println("EmbeddedImage image: " + image);
    }

}
4

0 回答 0