Carregar Classe java Durante Runtime de fora da aplicação

0 respostas
SirDominque

Ola gente :)
Estou com uma dúvida de como proceder aqui.

O problema é o seguinte,
Preciso carregar uma classe java que o usuário podera modificar porém, essa classe extende uma classe chamada Script.
Essa classe Script é o seguinte :

public class Script {

    public void Script()
    {
        
    }
    
    public void script(Player player, BitmapFont simpleWhiteFont) {

        int playerPosX = (int) (player.getX() / 16);

        int playerPosY = (int) ((player.getY() + player.getHeight() / 2) / 16); //(getY() + getHeight() / 2) / 16

    }
}

Então, fui fazer um teste.
Fui no meu D:/ e criei um arquivo chamado test.java
:

public class test extend Script
{

public String className = "script";


  public void script(Player player, BitmapFont simpleWhiteFont) {

       int playerPosX = (int) (player.getX() / 16);

       System.out.println("Player X Position : " + playerPosX );

    }

}

Nunca usei reflection porém ja li a respeito.
Tentei carregar a classe, mas sempre retorna null.

Pelo esquema que esta nesse momento, o método para carregar a classe, apenas tem a pasta que a classe esta, e sabe o nome da classe.

Eu preciso carregar essa classe e deixar uma instancia dela e ficar chamando este método script várias vezes. Enfim, a dúvida é sobre como carregar uma classe java , dado que eu tenho o diretório da pasta e o nome da classe.

Tentei isso :
private void loadScript(String scriptLocation) {

        // Create a File object on the root of the directory containing the class file
        File file = new File("D:/");

        try {
            // Convert File to a URL
            URL url = file.toURI().toURL();      // file:/c:/myclasses/
            URL[] urls = new URL[]{url};

            // Create a new class loader with the directory
            ClassLoader cl = new URLClassLoader(urls);

            // Load in the class; MyClass.class should be located in
            // the directory file:/c:/myclasses/com/mycompany
            Class cls = cl.loadClass("test");
            script = (Script) cls.newInstance();
            script.script(player, simpleWhiteFont);
            
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
java.lang.ClassNotFoundException: test at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at br.views.levels.Level_Loader.loadScript(Level_Loader.java:70) at br.views.levels.Level_Loader.<init>(Level_Loader.java:51) at br.views.MenuView$3.clicked(MenuView.java:169) at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:85) at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:57) at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:345) at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:303) at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:200) at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114) Java Result: -1
Criado 1 de janeiro de 2014
Respostas 0
Participantes 1