2011-06-14 180 views
0

我在Ubuntu中編寫了一些Java代碼,但現在我需要程序在Mac中運行(它不應該是現成的產品,我只是希望能夠編譯源代碼)。我只是想知道,在Mac中編譯時,是否會有很多代碼需要更改?Java編譯器與Linux/Windows上的編譯器相同嗎?

+0

軟件涉及到Swing GUI! – nicks 2011-06-14 04:41:24

+3

爲什麼你想象Mac有很多改變? Mac/Linux都來自Unix風格的內核。 Windows可能有很大的不同。然而,生成(編譯)的字節碼在任何地方都是一樣的。 Java Bytecode是所有JVM的標準。 – 2011-06-14 04:48:56

+1

無論32位/ 64位還是Linux/Windows,Sun/Oracle編譯器生成的字節碼都是相同的。您可能會在字節碼中看到IBM/Eclipse編譯器的細微差異,但它們不會影響GUI。 – 2011-06-14 08:12:53

回答

3

Java的核心思想之一是write once, run anywhere--換句話說,你只需編寫和編譯一次代碼,然後它就可以在任何安裝了JVM的平臺上運行(使用正確的版本)。因此,您無需爲Mac或任何其他操作系統重新編譯您的代碼。

Java編譯爲bytecode而不是本機機器碼。 Java虛擬機解釋並執行該字節碼,並使用just-in-time compiler將其轉換爲本機機器碼,以使其運行速度更快。

你的程序使用Swing並不重要 - 這本身並不意味着它不適用於Mac。

它不起作用的唯一原因是,如果您在代碼中使用硬編碼的操作系統特定的東西,如硬編碼Windows路徑(如C:\Program Files等) - Mac OS上不存在這些課程X或Windows以外的其他操作系統。

4

只要你有正確的JRE安裝程序,你的程序應該運行,只要你沒有硬件編碼依賴關係在它運行的機器上(即硬編碼文件路徑等)。

+0

是真的,只要所有使用的類都來自內置類或從內建類派生。 – 2011-06-14 04:44:44

+0

@jcomeau_ictx右邊 - 理想情況下它應該是一個FAT jar(即與所有依賴包裝在一起的jar)。 – CoolBeans 2011-06-14 04:45:55

2

編譯後的字節碼將是相同的;但如果您使用的是Mac上不可用的類,那麼您將需要做更多的工作。

+0

我有非常規的環境,我沒有使用任何額外的類。會這樣嗎? :S – nicks 2011-06-14 04:44:44

+0

它應該工作。這就是我敢說的。 – 2011-06-14 04:45:56

3

不要編譯任何東西!只要給他們的罐子。本地JVM將完成剩下的工作。這就是Java的工作原理。免責聲明:如果您需要第三方圖書館罐子,您可能還需要發貨,或創建一個包含您需要的第三方罐子的戰爭檔案(或類似包裝)。

3

Java使用JVM或Java Virtual Machine來運行您編譯的代碼。只要你沒有在你的程序中使用任何奇怪的操作系統特有的功能(比如綁定到非Java庫或運行系統命令),你的「編譯」Java就可能運行在大多數Java實現上。

有多個JVM版本和多個JVM實現,所以如果你不記住這一點,你可以可以運行到compatibility issues