1

.javaファイルを書き込んで作成し、それをパッケージフォルダーに配置するプログラムがあるというこの問題があります。その後、.javaファイルから情報を取得し、それを自分で使用します。(それは私が次にインポートするメソッドで新しいクラスを作成します)。問題は、Eclipseを使用するまで機能しない場合は、「自己作成ファイル」を更新することです。メインファイルに「自己作成ファイル」を更新させる方法はありますか?

これが重複している場合は申し訳ありません。どこにも見つかりませんでした。

私のコード:

package dk.Nicolai.Bonde;
import java.io.*;

public class main {

public String outputString ="Math.sqrt(25)" ;
static String outputPath ="src/output.txt";
/**
 * @param args
 * @throws UnsupportedEncodingException 
 * @throws FileNotFoundException 
 */
public static void main(String[] args) throws IOException{
        new main().doit(args);
    }

public void doit(String[] args) throws IOException{
    PrintWriter writer = new PrintWriter("src/dk/Nicolai/Bonde/calculate.java", "UTF-8");
        writer.println("package dk.Nicolai.Bonde;");
        writer.println("public class calculate{");
        writer.println("public void calc(){");
        writer.println("System.out.println("+outputString+");");
        writer.println("}");    
        writer.println("}");
        writer.flush();
        writer.close();

    calculate calcObj = new calculate();
    calcObj.calc();

}
}
4

3 に答える 3

3

あなたの主な間違いは、実行時に保存後に自動的にファイルにコンパイルされることを期待していたことです.class(これは、Ctrl + Sを押すたびに、Eclipseなどの正常なIDEが舞台裏で自動的に実行します)。したがって、これは真実ではありません。JavaCompiler実行時に、でコンパイルしてから、でロードする必要がありますURLClassLoader。具体的な例は、この関連する質問と回答に示されています。Javaクラスをプログラムでコンパイルしてインスタンス化するにはどうすればよいですか。

具体的な例では、その後だけでは実行できないことにも気付くでしょう。new calculate();クラスパスは、実行時などに自動更新されません。Class#forName()FQNとを渡して、を実行する必要がありますURLClassLoader。例えば

Calculate calculate = (Calculate) Class.forName("com.example.Calculate", true, classLoader);

もう1つの間違いは、ディスクファイルシステムの現在の作業ディレクトリが常にEclipseプロジェクトのソースルートフォルダであることに依存していることです。これは堅牢ではありません。このフォルダは、アプリケーションをビルドおよび配布するときにはまったく存在しません。代わりに、IDEプロジェクトの構造外の別の場所にある固定/絶対フォルダーにファイルを書き込む必要があります。これは、前述の回答でもカバーされています。

于 2012-12-19T20:16:54.787 に答える
0

いいえ、あなたがすることはできません。Eclipseでリソースを手動で更新する必要があります。ファイルを実行してリソースを更新するEclipse用のプラグインを作成できますが。

Eclipseはディレクトリとファイルを使用してリソースを格納しますが、ファイルシステムを直接表現するものではありません。

于 2012-12-19T20:12:54.027 に答える
0

コードが機能しませんでした。

  • mainのコンパイル時に計算が必要です。実行時に提供します。
  • calculate.javaはコンパイルされないため、クラスを動的にロードする他の手法でも機能しません

実行時にクラスを構築する場合は、reflexionAPIの使用を検討してください

于 2012-12-19T20:15:08.397 に答える