2012-02-22 4 views
0

私はCodi​​ngbat.comの行に沿ってプログラムを作成しています。nullを返すJavaCompiler

実行時には、コードをコンパイルして実行する必要があります。これはすべて処理されています。 現在、私はJavacToolを使用することを余儀なくされています。

私は2つの基本的な質問がある:

1)私は、実行可能jarファイルから実行したときにはnullを返すからToolProvider.getSystemJavaCompilerを()を停止するにはどうすればよいですか?

2)上記が不可能な場合は、com.sun.tools.javac.api.JavacToolのjarを追加する方法があります。参照されたライブラリとして持っていなくても、通常のインポートのように動作しますか?

これに感謝しますが、私が望むのであれば、参照されているライブラリとそれを持たないjarでJarをアップロードできます。

ただ、おかげ

JavacTool

、ない、参照ライブラリー作品と1明確であるが、それは大への道、そしてJavaCompilerを使用して日食を駆け抜けている瓶、そして遅いします

編集:

これは私が前に見たようにこれが可能であることを確かめていますが、どこでどのように忘れています。

答えて

2

I 容疑者これは単なるJavaのバージョンの問題です。 JREに付属のバージョンを実行すると、利用可能なツールはありません。 JDKに付属のバージョンを実行すると、それが実行されます。 JDKと

c:\Users\Jon\Test>"\Program Files\java\jre7"\bin\java Test 
null 

そして今:私のラップトップ上のjava.exeのJREバージョンでそれを実行する

import javax.tools.*; 

public class Test 
{ 
    public static void main(String[] args) 
    { 
     System.out.println(ToolProvider.getSystemJavaCompiler()); 
    } 
} 

は例として、ここでは短いが完全なプログラムです

c:\Users\Jon\Test>"\Program Files\Java\jdk1.7.0"\bin\java Test 
[email protected] 

したがって、JDKに関連付けられたJavaバイナリを明示的に指定してみてください。

+0

私はjarファイルを実行して実行するとRuntime.exec関数を使用してこのようなタスクを実行すると、この機能はうまく動作しますか?あなたが投稿したCMD? –

+0

@Legend:正直言ってわかりません。正しいバイナリを見つけることができたら、おそらく...しかし、それはやや厄介なブートストラップになるでしょう。 –

+0

ああ、私はそれをファイル(.jar、.exe)として実行させ、コンパイラでこれを行うようにしていますが、私は.batを使用しない方がよいでしょう。 –

0

あなたは既に、すべてのユーザーにJDKがインストールされていることを知っています.Javaプログラムを使用しているときにJDKのクラスパスを見つける方法を知っています。 DLLをロードする必要はありません。 tools.jarにcom.sun.tools.javac.api.JavacToolクラスをロードする必要があります。 tools.jarの読み込み方法については、How to load a jar file at runtimeを参照してください。

+0

すべてのユーザーにJDKがあります。また、JDKディレクトリのFile表現を取得する方法を見つけることができたら、これを使って私が望むことをどうやって行うことができますか? –

+0

私はtools.jarについて知っています、それは現在のものです。それはちょうど33kbではなく、6MBにするものです。 –

+0

@Legend Uhhm ... JDKディレクトリを検索した後に.jarファイルを動的にロードするには...わかりません。 System.loadとSystem.loadLibraryを突き抜けてみてください。 –