С созданием то понятно. Можно ли будет этот файл использовать как класс?CoomingSoon написал(а):File f=File.createTemp......
Ну собственно можно поточнее? В плане получения массива байтов из файла с исходным кодом.GloomyFolken написал(а):Ну, компиляция джава-кода - тот ещё гемор, а вот подгрузить динамически созданный класс - почему бы и нет?Просто загружаешь из массива байтов байткод.
ClassLoader#defineClass
Магическое число 1885430635 в классе-файле TestClassMrCreppo написал(а):В общем гружу класс, получаю вот такое:
Код:cpw.mods.fml.common.LoaderException: java.lang.ClassFormatError: Incompatible magic value 1885430635 in class file TestClass
package assets.buildbox;
import net.minecraft.block.Block;
import net.minecraft.creativetab.CreativeTabs;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class TestClass extends CreativeTabs {
public TestClass(int position, String tabID) {
super(position, tabID);
}
@SideOnly(Side.CLIENT)
public int getTabIconItemIndex() {
return Block.blockEmerald.blockID;
}
public String getTranslatedTabLabel() {
return "TestLabel";
}
}
package ru.modloader;
import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class NetworkClassLoader extends ClassLoader {
public Class findClass(String path, String name) {
byte[] b;
try {
b = readContent(path, name);
return defineClass(name, b, 0, b.length);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public byte[] readContent(String path, String name) throws IOException{
ByteArrayOutputStream out = null;
InputStream input = null;
try{
out = new ByteArrayOutputStream();
input = new BufferedInputStream(new FileInputStream(path));
int data = 0;
while ((data = input.read()) != -1){
out.write(data);
}
}
finally{
if (null != input){
input.close();
}
if (null != out){
out.close();
}
}
return out.toByteArray();
}
}
Ахахахахахпхпхпхахахахахru.modloader