2011-08-01 128 views
1

我不想創建一個包含Java編譯器的小程序,並且可以從Web(或從文本字段中下載並編譯.java文件)。 據我所知,Java編譯器是基於Java的,所以這應該是可能的。 然而,我想知道的一件事是Java編譯器能夠將類文件存儲在內存中,還是需要明確的磁盤訪問。 另外,我想捕獲javac產生的錯誤,但這是很自然的。在Java applet中包含Javac

有沒有關於這個地方的文章呢?我無法找到很多案件。我可以走進哪些麻煩?

編輯:我打算使用OpenCL的小程序,所以我將不得不簽署小程序。

編輯:類似的問題在這裏:Hosting the Java compiler in an applet or in Google AppEngine?

+0

請有[查看](http://stackoverflow.com/questions/616532/on-the-fly-in-memory-java-code-compilation-for-java-5-and- java-6)這個問題,可能對你有幫助。 –

+0

謝謝!看看它。 – RobotRock

+0

爲什麼你想用解釋型語言來做到這一點? – Mikaveli

回答

1

Java編譯器永遠是你的。你應該使用java.lang.Compiler類。但我相信你會遇到SecurityManager的問題。

如果我是你,我寧願在服務器端編譯代碼。這意味着我會開發能夠獲得Java源代碼並編譯它的servlet。生成的java類應該可以通過HTTP在配置爲可被applet訪問的路徑下使用,因此您的applet將能夠在編譯後運行此類。

+0

我想過這個,我認爲這確實是更簡單的方法。然而,這將花費用戶的帶寬和時間,所以如果可能的話,我想在客戶端進行編譯。另外,它可能會引起一些安全問題。 – RobotRock

+0

用戶不會因爲那個而愛你(applets足夠呆板);) –

+0

Java Webstart也不錯。但這不會改變案件;它從瀏覽器運行。 – RobotRock

1

從文檔上SSCCE Text Based Compiler

  • javax.tools.ToolProvidergetSystemJavaCompiler()的文檔提到它返回「如果沒有提供編譯器,則提供此平臺的編譯器或null,但沒有說明它爲什麼可能爲空,也不知道編譯器將不可用於applet或webstart應用程序。
+0

在你引用的文本上方有一個webstart鏈接。如果你提供了一個tools.jar,我想它會起作用。 – RobotRock

+1

是的。如果用戶安裝了JDK,就按照我在該代碼中所做的那樣進行操作,並讓他們確定它在哪裏。另請參閱[將編譯器添加到應用程序的運行時類路徑](http://pscode.org/stbc/help.html#classpath)下的註釋。 –

+0

如果我想用OpenJDK的tools.jar提供我的webstart,那麼只能使用JRE進行編譯? – RobotRock