使用字符串在java中定义类

使用字符串在java中定义类,java,Java,每个人都会马上说Class.forName,但这不是事实 好的,所以我试着从一个网站上获取一堆文本,并将其编译成一个类。到目前为止,我已经能够从网站上获取文本,但由于某些原因,我无法定义它 请看一看: 主类:(Driver.java) } 和ByteClass.java: public class ByteClass { private ArrayList<Byte> nonarraybytes = new ArrayList<Byte>(); public byte[]

每个人都会马上说Class.forName,但这不是事实

好的,所以我试着从一个网站上获取一堆文本,并将其编译成一个类。到目前为止,我已经能够从网站上获取文本,但由于某些原因,我无法定义它

请看一看:

主类:(Driver.java)

}

和ByteClass.java:

public class ByteClass {
private ArrayList<Byte> nonarraybytes = new ArrayList<Byte>();
public byte[] bytes;
public String[] lines;
public Class<?> clazz;

public ByteClass(String name, byte[] bytes) {
    for (byte b : bytes)
        nonarraybytes.add(b);
    bytes = new byte[nonarraybytes.size()];
    for (int i = 0; i < bytes.length; i++)
        bytes[i] = nonarraybytes.get(i);
    clazz = define(name, bytes);
}

protected Class<?> define(String name, byte[] bytes) {
    return new ClassLoader() {
        public Class<?> defineClass(String name, byte[] bytes) {
            return super.defineClass(name, bytes, 0, bytes.length);
        }
    }.defineClass(name, bytes);
}
公共类字节类{
私有ArrayList非ArrayBytes=新ArrayList();
公共字节[]字节;
公共字符串[]行;
公开课;
公共字节类(字符串名称,字节[]字节){
for(字节b:字节)
添加(b);
字节=新字节[nonarraybytes.size()];
for(int i=0;i
}

所以,问题是:

Enter the URL of the main class:  https://raw.github.com/JamesNorris/Ablockalypse/master/src/main/java/com/github/JamesNorris/Threading/FakeBeaconThread.java
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1885430635 in class file Main
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at com.github.ByteClass$1.defineClass(ByteClass.java:134)
    at com.github.ByteClass.define(ByteClass.java:136)
    at com.github.ByteClass.<init>(ByteClass.java:21)
    at com.github.Driver.main(Driver.java:20)
输入主类的URL:https://raw.github.com/JamesNorris/Ablockalypse/master/src/main/java/com/github/JamesNorris/Threading/FakeBeaconThread.java
线程“main”java.lang.ClassFormatError中出现异常:类文件main中的魔法值1885430635不兼容
位于java.lang.ClassLoader.defineClass1(本机方法)
位于java.lang.ClassLoader.DefineClassSecond(未知源)
位于java.lang.ClassLoader.defineClass(未知源)
位于java.lang.ClassLoader.defineClass(未知源)
位于com.github.ByteClass$1.defineClass(ByteClass.java:134)
位于com.github.ByteClass.define(ByteClass.java:136)
位于com.github.ByteClass.(ByteClass.java:21)
位于com.github.Driver.main(Driver.java:20)

您没有在InputStream中获得真正的java类,这就是代码抛出错误的原因。尝试记录您从URL接收的输入,这将告诉您出了什么问题


再看看这个,他和你面临着同样的问题。

你从来没有真正编译过这个类;您正在尝试加载Java源代码(
*.Java
),就好像它是一个类文件(
*.class


要解决这个问题,您需要在过程中的某个时刻调用Java编译器。最简单的方法是事先编译程序,并将类文件放在网站上,而不是源代码(或附加源代码)。

在某些情况下,您必须使用编译器。好消息是您可以使用从Java动态运行编译器。编译之后,您可以加载类并实例化它,或者执行任何您想要的操作


这里还有一些老方法。

我不能,它必须作为文本加载。我试图加载的当前类只是一个测试。我将尝试使用编译器。下载的是.java文件还是.class文件?如果是前者,您必须先编译它,然后才能尝试运行它。请检查:
Enter the URL of the main class:  https://raw.github.com/JamesNorris/Ablockalypse/master/src/main/java/com/github/JamesNorris/Threading/FakeBeaconThread.java
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1885430635 in class file Main
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at com.github.ByteClass$1.defineClass(ByteClass.java:134)
    at com.github.ByteClass.define(ByteClass.java:136)
    at com.github.ByteClass.<init>(ByteClass.java:21)
    at com.github.Driver.main(Driver.java:20)