私の問題は、実行時にクラスを作成したいということです(.java
名前、パッケージ、メソッドなどを含むファイルを作成します)。コンパイルして実行しようとすると、プログラムの実行中に作成した新しいバージョンではなく、常に古いバージョンがロードされます。
コードで何を変更する必要がありますか?
File f = new File("src/pfc/Temp.java");
FileWriter w = new FileWriter(f);
BufferedWriter bw = new BufferedWriter(w);
PrintWriter wr = new PrintWriter(bw);
wr.write("package pfc;\n\npublic class Temp {\n\tpublic float getResult(float[] array){\nfloat res=0;//usar para guardar el resultado final\n");//preparamos la clase
wr.write(entrada.getText());//escribimos en el archivo
wr.write("\nreturn res;\n}\n}");
bw.flush();
bw.close();
wr.flush();
wr.close();
String fileToCompile = f.getAbsolutePath();
try {
pfc.Temp result = new pfc.Temp();
//Otra forma
Class<?> c = Class.forName("pfc.Temp");
Class[] argTypes = new Class[] { float[].class };
Method main = c.getDeclaredMethod("getResult", argTypes);
float nts[] = new float[model.getColumnCount()];
for(int i = 0; i < model.getRowCount(); i++){
System.err.println("Voy a la fila: "+i+" de "+model.getRowCount());
for(int j = 1; j < model.getColumnCount(); j++){
nts[j] = Float.parseFloat(model.getValueAt(i,j).toString());
System.err.println("Notas parciales: "+nts[j]+" de la columna "+j+" sobre "+model.getColumnCount());
}
}
Object comp = main.invoke(result, (Object) nts);
ありがとう !
わかりました、私はそれをよりよく説明しようとします。デスクトップ アプリケーションがあり、実行中にクラスをロードしたいと考えています。問題は、このクラスを JTextArea で変更した後、ファイルに書き込み、これをコンパイルしたいのですが、この方法では機能しません。アプリケーションを実行する前に書き込まれたファイルをコンパイルします。実行時に新しく書き込むのではありません。
ClassLoader で試してみます。Temp.java は次のようになります。
package pfc;
public class Temp {
public float getResult(float[] array){
float res=0;//usar para guardar el resultado final
float erer = array[1];float fdsfds = array[2];float awd = array[3];
res= 5;
return res;
}
}
そして、アプリケーションでこれを編集するときは、res= 5; を置き換えたいと思います。res= 10に。コンパイルしましたが、結果は 10 ではなく 5 です。