java.lang.ClassNotFoundException: resources?-Collection of common programming errors


  • Andreas L.

    I am trying to create a Textbutton with a skin that is defined in a json file. I am a beginner at libgdx, so maybe the problem is between monitor and keyboard 😉 I hope you can help me.

    LibGDX-version: Fresh Git-Pull (20th Nov. 2012)

    My json (at “data/button.json”):

    {
            resources: {
                    com.badlogic.gdx.graphics.Color: {
                            white: { r: 1, g: 1, b: 1, a: 1 },
                            downFontColor: { r: 1, g: 0.1, b: 0.2, a: 1 }
                    },
                    com.badlogic.gdx.graphics.g2d.BitmapFont: {
                            default-font: { file: default.fnt }
                    }
            },
            styles: {
                    com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
                            default: {
                                    font: default-font, 
                                    downFontColor: downFontColor,
                                    fontColor: white
                            }
                    }
            }
     }  
    

    Where it fails:

        Skin skin = new Skin(Gdx.files.internal("data/button.json"));
    

    Exception:

    Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.SerializationException: Error reading file: data/button.json
        at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:111)
    Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: data/button.json
        at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:95)
        at com.badlogic.gdx.scenes.scene2d.ui.Skin.(Skin.java:72)
        at eu.loecken.tools.virtuallampsi.screens.MenuScreen.createButton(MenuScreen.java:105)
        at eu.loecken.tools.virtuallampsi.screens.MenuScreen.create(MenuScreen.java:47)
        at eu.loecken.tools.virtuallampsi.screens.MenuScreen.show(MenuScreen.java:131)
        at com.badlogic.gdx.Game.setScreen(Game.java:62)
        at eu.loecken.tools.virtuallampsi.MainGame.create(MainGame.java:48)
        at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:125)
        at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:108)
    Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: data/button.json
        at com.badlogic.gdx.utils.Json.fromJson(Json.java:596)
        at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:93)
        ... 8 more
    Caused by: com.badlogic.gdx.utils.SerializationException: 
        at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:424)
        at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:1)
        at com.badlogic.gdx.utils.Json.readValue(Json.java:762)
        at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:409)
        at com.badlogic.gdx.utils.Json.fromJson(Json.java:594)
        ... 9 more
    Caused by: java.lang.ClassNotFoundException: resources
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:422)
        ... 13 more
    

    *Working code without json-file: * (just to show that something works)

    Texture texture = new Texture(Gdx.files.internal(imageURL));
    textures.add(texture);
    
    TextureRegion image = new TextureRegion(texture);
    TextureRegion flippedImage = new TextureRegion(image);
    flippedImage.flip(true, true);
    ButtonStyle style = new ButtonStyle();
    style.up = new TextureRegionDrawable(image);
    style.down = new TextureRegionDrawable(flippedImage);
    return new Button(style);
    

    Update: Also this one is working:

    private final BitmapFont defaultFont = new BitmapFont(
            Gdx.files.internal("data/default.fnt"), false);
    private final Texture btnTexture = new Texture(
            Gdx.files.internal("buttons/lvl.png"));
    
    private Button createButton(String text) {
        // Initialize skin
        // Skin skin = new Skin(Gdx.files.internal("data/button.json"));
        TextureRegion image = new TextureRegion(btnTexture);
        TextureRegion flippedImage = new TextureRegion(image);
        flippedImage.flip(true, true);
        TextButtonStyle style = new TextButtonStyle();
        style.up = new TextureRegionDrawable(image);
        style.down = new TextureRegionDrawable(flippedImage);
        style.font = defaultFont;
        return new TextButton(text, style);
    }
    

  • idaNakav

    this is how your json file should be like , according to Skin docs

    {
        className: {
                name: resource,
                ...
        },
        className: {
                name: resource,
                ...
        },
        ...
    }
    

    as you can see you get the exception since it looks for “resources” class .. so just change it to the template above for example:

    {
        com.badlogic.gdx.graphics.Color: {
                white: { r: 1, g: 1, b: 1, a: 1 },
                red: { r: 1, g: 0, b: 0, a: 1 },
                yellow: { r: 0.5, g: 0.5, b: 0, a: 1 },
        },
        com.badlogic.gdx.graphics.g2d.BitmapFont: {
                medium: { file: default.fnt }
        },
        com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
                default: {
                        down: button, up: button,
                        font: medium, fontColor: white
                },
                green: {
                        down: button, up: button,
                        font: medium, fontColor: { r: 0, g: 1, b: 0, a: 1 }
                }
        }
    

    }

    P.S button is an real image resource also i’m pretty sure your template of the skin json file is for old versions of libgdx