2012-02-25 9 views
1

問題がいくつか見つかりましたが、解決策が機能しませんでした。私は自分のローカルサーバー上に、Javaクラス全体のテキストを入力できるWebページを持っています。送信がクリックされると、出力が表示されます。 shell_execを使って、私はjavaファイルをコンパイルできます。私はそれを実行しようとすると何も得られません。PHPからJavaファイルを実行する

shell_exec("javac /folder/Test.java"); // works 
echo shell_exec("/usr/bin/java folder.Test"); // nothing is returned 

私はそれが他の誰かのために問題を解決したことを読んだときJavaへの完全なパスを使用することにしました。実行時:

/usr/bin/java folder.Test 

コマンドラインから実行します。

package folder; 
public class Test{ 
public static void main(String[] args){ 
    System.out.println("testing"); 
} 
} 

EDIT:Test.javaファイルは次のようになります

私は仕事にw0rldartのを得ることができませんでした。私は実際にマチューを試してみることができます。

Exception in thread "main" java.lang.NoClassDefFoundError: Test Caused by: 
java.lang.ClassNotFoundException: Test at 
java.net.URLClassLoader$1.run(URLClassLoader.java:217) at 
java.security.AccessController.doPrivileged(Native Method) at 
java.net.URLClassLoader.findClass(URLClassLoader.java:205) at 
java.lang.ClassLoader.loadClass(ClassLoader.java:321) at 
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at 
java.lang.ClassLoader.loadClass(ClassLoader.java:266) Could not find the main class: 
Test. Program will exit. 

ITワークス:私は-classpathなしと同じエラーを取得し-classpathオプション(私はそれを正しく使用している場合、私はわからない)

echo shell_exec("java -classpath ./folder/ Test 2>&1"); 

を追加しようとした だけに持っていました期間を削除する

echo shell_exec("java -classpath ./folder/ Test 2>&1"); //error 
echo shell_exec("java -classpath /folder/ Test 2>&1"); //works 

答えて

3

私はこれが違いを生むのは非常に不確実です。しかし、あなたのコマンドの後に2> & 1を追加しようとしましたか?その後、

echo shell_exec("/usr/bin/java folder.Test 2>&1"); 

私はのSystem.out.printlnはその出力を表示するには、標準エラー出力を使用しているとは思わないが、それはとにかく試みる価値があるかもしれません...

+0

違いが出て、出力が出ます。しかし例外です。コマンドラインから実行した場合、正しく実行されます。 – Ryan

+0

スレッド "main"の例外java.lang.NoClassDefFoundError:javafiles/Test原因:java.lang.ClassNotFoundException:javafiles.Test at java.net.URLClassLoader $ 1.run(URLClassLoader.java:217)at java .security.AccessController.doPrivileged(ネイティブメソッド)java.net.URLClassLoader.findClass(URLClassLoader.java:205)at java.lang.ClassLoader.loadClass(ClassLoader.java:321)at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:294)at java.lang.ClassLoader.loadClass(ClassLoader.java:266)メインクラスを見つけることができませんでした:javafiles.TestCoundクラスが見つかりません:javafiles.TestProgram willexit – Ryan

+0

stderr。私は、PHPプロセスがシステム変数$ classpathにアクセスできないと思います。 w0lrdartの提案を試してみるか、正しく覚えていれば-classpathを使ってコマンドラインでクラスパスを設定することができます。 – Tchoupi

1

フォルダパッケージからテストクラスを使用する場合Test.classはfolderという名前のフォルダに保存する必要があります。次に、CLASSPATHにフォルダの親ディレクトリが必要です。

したがって、設定が/rootdir/foo/folder/Test.classの場合、次のようにテストを開始することができます。java -classpath /rootdir/foo folder.Test

phpのshell_execからjavaを使用する場合、この動作は同じと思います。

+0

私はそれを修正したと言って戻ってきました、そして、これが私がやったことです。おそらく私は早くここに戻ってきて、あなたのアドバイスを使っていたはずです。とにかく、ありがとう。 – Ryan

関連する問題