わかりましたので、ユーザーが.javaファイルを書き込んで実行できるプログラムがあります(実行時....duh!!)。現在、ユーザーは 1 つの .java ファイルのみを編集できます (現時点では)。次に、.java ファイルをコンパイルして、.class ファイルにします。ファイルを実行するには、ユーザーがvoid main()
関数を持っていることを期待しており、その関数を実行して実行するだけです。そのため、JTextArea、BufferedReader、BufferedWriterなどを使用して.javaファイルを編集可能にしました。ファイルをコンパイルするために書いたコードは次のとおりです。
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
try (StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null)) {
Iterable<? extends JavaFileObject> compilationUnits = filemanager.getJavaFileObjectsFromStrings(Arrays.asList("src/User/Script.java"));
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, null, null, compilationUnits);
boolean success = task.call();
System.out.println(success);
} catch(IOException e){
System.out.println("IOException");
}
このコードは、ファイルを .class ファイルにコンパイルします。そこからメイン関数を実行すると、機能しません。実際、成功の値は true です (true と表示されます)。これが完了したら、ユーザーは「実行」ボタンを押し、これを使用して関数を実行します。
Script script = new Script();
script.main();
何らかの理由で、スクリプトが更新されません。スクリプトが変更される前に書かれたものと同じものを実行します....ファイルは期待どおりに書かれていますが、スクリプトは次回プログラムが起動されたときにのみ何らかの「更新」を行います。(これをスタンドアロンとして試したことはありませんが、Netbeans である IDE で更新されます)。
この問題の解決策が必要なだけでなく、何が行われているのかについての説明も必要です。何が間違っているのか、なぜ間違っているのか、それを修正するために何をする必要があるのか を説明してください.
よろしく、
ラクシット