Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
所有平台上的java_Java_Windows_Linux_Macos - Fatal编程技术网

所有平台上的java

所有平台上的java,java,windows,linux,macos,Java,Windows,Linux,Macos,如果你想用java为windows、mac和linux编写一个桌面应用程序,那么所有这些应用程序的代码都是一样的吗 您只需更改GUI,使Windows应用程序更像Windows,等等 在不深入了解细节的情况下,它是如何工作的?您使用在不同平台上呈现相同UI的通用UI库 一些使用自己的绘图/小部件构造,另一些抽象本机UI元素 简单 示例:、和或不仅代码相同,而且编译结果也相同(java编译器javac的输出),至少在理论上是如此。安装在每个操作系统上的JVM负责将编译后的输出(称为“字节码”)转换

如果你想用java为windows、mac和linux编写一个桌面应用程序,那么所有这些应用程序的代码都是一样的吗

您只需更改GUI,使Windows应用程序更像Windows,等等


在不深入了解细节的情况下,它是如何工作的?

您使用在不同平台上呈现相同UI的通用UI库

一些使用自己的绘图/小部件构造,另一些抽象本机UI元素

简单


示例:、和或

不仅代码相同,而且编译结果也相同(java编译器javac的输出),至少在理论上是如此。安装在每个操作系统上的JVM负责将编译后的输出(称为“字节码”)转换为特定于平台的代码。这意味着,在大多数情况下,您可以在Linux上设计和构建Java应用程序,并在Windows或Mac上运行。

Java的卖点之一是“编写一次,在任何地方运行”(几乎可以)

编译后的字节码由Java虚拟机(JVM)执行。JVM特定于其运行的平台,但具有JVM的任何平台都可以执行相同的字节码。代码不必重新编译


Swing是Java的跨平台GUI工具包。您可以对其进行配置,使其拥有一个在不同平台上看起来相同的GUI(它在任何平台上都不会看起来是本地的),或者您可以告诉它使用最适合其执行的平台的外观。因此,如果您在Windows上运行,它将看起来像一个Windows应用程序,如果您在OS X上运行,它将看起来像一个本机Mac应用程序。

如果您希望您的应用程序的UI在Windows上是“类似Windows的”,在Mac上是“类似Mac的”,等等,请看看支撑Eclipse的SWT和RCP技术。特别是具有您想要的属性类型


缺点(如果您想这么说的话)是您的应用程序将无法重用任何现有的基于AWT/Swing的库。显然,您必须学习如何使用SWT堆栈。

人们过去常说Swing在不同的平台上不会产生本地结果。显然这一切都改变了,秋千现在几乎完美了。去荡秋千!对于我们这些热爱Java(还有Groovy!和JRuby!)的人来说,这是个好消息。这可能是,但正在进行中

Java将运行良好,您将能够为VM编写和编译一次。但是,如果希望用户不必键入
java-jar app.jar
,则需要为每个平台对应用程序进行不同的打包。在OSX上,你需要制作一个.app(非常简单),Windows和Linux也有很多启动选项。另外,JavaWebStart也是一种可能性

希望有帮助


编辑:让Swing在OSX上工作并看起来像本地人需要额外的步骤。请参阅。

代码本身将在任何具有Java虚拟机的平台上运行,因为所有JVM都将相同的字节码转换为特定于操作系统的机器代码


至于外观,有一种方法(
UIManager.getSystemLookAndFeelClassName()
)允许您让界面使用与其他操作系统匹配的GUI。它在不同的操作系统上返回不同的结果。

如果将应用程序分为三个不同的层:

  • 逻辑
  • 演示文稿(如果是图形应用程序,将使用Java2D或等效工具)
  • 交互-按钮、菜单、对话框等
然后,您可以在不同的平台上为所有三个应用程序使用相同的代码,但只会在其中一个平台上“感觉”正确。通常,逻辑和表示不会改变,但如果Java应用程序要模拟本机应用程序,则交互需要改变

例如,OSX上的默认菜单位于屏幕顶部,Windows和Gnome上的默认菜单位于窗口顶部。Gnome通常在“编辑”下有应用程序属性,Windows下有Windows,OS X下有apple符号(或其他),因此菜单的细节不应该相同。每个系统都有不同的布局和字体规则,其中只有一部分是通过模仿Swing native的外观来实现的


另一个选择是制作一个web应用程序,它消除了相当多的变化——您没有窗口、菜单和对话框,因为这些按钮是由浏览器提供的,所以不是您的问题,用户也不希望web应用程序具有特定于平台的行为

总之,是的,java通常是一次编写,在任何地方运行。它被“剥皮”以适应平台。如果你希望它在手机上工作,你必须注意硬件信息,比如屏幕大小

请注意,它也将在电缆盒上运行——我正在做一些这方面的工作

甚至与特定于平台的元素的交互也常常在同一个代码库中——因此,如果您有一个库检测到windows工具栏的存在,您可能会检测到它并支持它(如果它可用),但代码只是在mac上检测不到它(或者可能使用不同的库)


然而,一个称职的工程师不必为不同的平台重新编译。

我目前正在开发一个Web应用程序,我们通常在Windows上进行开发,但测试和生产是在Linux上进行的。在过去,我编写的GUI应用程序在Windows和Linux上运行的代码完全相同。我从未在Mac上使用过Java,但我认为它的端口与Windows和Linux之间的端口一样好

Java的美妙之处在于,90%的时间你甚至不必去想它。您只需编写在您正在开发的平台上工作的代码,它就会神奇地进行移植

我唯一经常遇到的问题就是处理文件。Java中有一些功能可以帮助您,但有时您必须不遗余力地利用它们。比如,文件名是不同的:在windows上