跨平台应用。需要建议

时间:2010-07-02 21:22:21

标签: java cross-platform wxwidgets

我需要开发一个适用于Mac,Windows和* nix的应用程序。该应用程序将不得不处理大量的数据,并将必须显示大图(因此需要一些2D绘图)。我应该去Java吗? wxWidgets的?为每个平台开发一个版本? 哦,只是出于好奇,如果我想为网络构建这个应用程序,你认为它会是多么可行? 任何建议都非常感谢。

由于

7 个答案:

答案 0 :(得分:5)

Java和Swing的第二次投票。跨平台的优势远远超出了小部件,您只需要为所有三个平台维护一套支持库。 Java还提供对2D绘图的低级访问,并提供了许多成熟的图形和图表库。

我并不是说你不能为每个平台获得等效的库,但是在维护三套库的交付到正确的平台并为一切提供一套库之间存在很大的差异。

答案 1 :(得分:1)

Swing 坏,Java是一个严肃的选择。但是,即使使用System Look and Feel,Swing在每个操作系统上基本上看起来都像Swing。无论你怎么努力,它都不会看起来像本地人。

Qt是一个不错的高级C ++框架,虽然不是原生的,但在所有系统上确实看起来更加原生/体面。小部件模型很棒,功能也很完整(例如,它甚至包括完整的WebKit核心)。

答案 2 :(得分:1)

我已经将Eclipse RCP用于我的开源项目。使用它的好处是你的应用程序UI将获得原生的外观和感觉,换句话说,如果你在Windows 7中运行你的应用程序,你会得到透明的外观和感觉,如果你在Mac上运行,你会得到光滑的外观曲线灰色吧。在我看来,这肯定比Swing好得多。我之前也做过Swing和AWT。

使用Eclipse RCP,将应用程序配置为在不同的操作系统中运行非常容易,只需检查您需要的操作系统,Eclipse RCP将为您生成特定于操作系统的应用程序文件。

Tadaa .... :)

修改

一些有用的链接: -

Eclipse RCP website

A simple tutorial

答案 3 :(得分:1)

这取决于。 Java(以及其他跨平台框架)的问题在于它在Mac上看起来不太正确。 Mac用户,一个胡思乱想的人,可能会抱怨用户界面没有在他们的平台上寻找和行为。

我有很多经验让wxWidgets应用程序在Mac上看起来“正确”,并且在某些情况下可以正常工作,而我的粗略数字是需要20%的努力才能让它正常工作/感觉正确Mac。但这是可以完成的。 (即使您不关心Mac用户的感受,仍然需要花一些时间来查看Mac - 以及您部署wxWidgets应用程序的所有其他平台 - 可能只会出现运行您的应用程序的错误。

至少,使用wxWidgets /其他跨平台框架,您可能遇到需要使用特定于平台的代码(某处)以获得正确影响的情况(您希望优先启动应用程序)在启动时,例如:自定义代码)。

Mac编程社区有一个变化,虽然我承认它在高度集中的GUI应用程序中不可行,但是为每个平台编写特定于平台的UI。如果您的业务逻辑被正确考虑,理论上这应该是可能的。比如用C ++编写业务逻辑,然后从.NET GUI调用C ++,并从Mac上的Cocoa UI调用C ++。

在一个项目中,我在这个单独的UI方法中一直在工作(UI只是waaaayyy太大了)。在另一个项目上它可能有用,虽然UI非常小。

@Pete Kirkham建议使用OpenGL:如果是为每个平台做一个shell的问题(不过你在每个平台都做一个OpenGL视图),你也可以为每个平台完成你的视图代码,如果OpenGL是在你的情况下是可行的。

然后是网络。在过去的几年里,在网络空间的图形方面做了一些有趣的工作。可能是您的需求(大量数据,图形)超过可用的需求,或者您必须担心服务器部署和(比如)跟上用户的大量计算请求。可能是Web方法运行良好 - 只有一个地方可以部署软件等等。

我认为这完全取决于您需要的图形和数据工具的框架。 wxWidgets有一个想到的图形框架:wxPlot(我认为还有另一个)。还有一个来自NVIDIA的样本,关于如何使用wxWidgets使用Scene Graph SDK。 Mac的平台特定应用程序可以使用Core Plot。网络有各种各样的图表框架。

或许QT或Mono有更好的图形功能,或者你的应用程序所依赖的其他东西,所以你最终会这样做。

答案 4 :(得分:0)

我也会选择Mono作为选项。

  • C#是一种很好用的语言
  • 可以从
  • 中选择several IDEs
  • 许多开源libraries,例如GTK#用于图形甚至SIMD support,如果您有大量数据需要处理,它可能很有用,并且它适合这种优化。
  • 能够在ASP.NETMoonlight中开发前端,以获得更丰富的用户体验

答案 5 :(得分:0)

这里至关重要的是,如果您可以创建一个Web应用程序,以便用户使用浏览器,并且您的代码在服务器上运行?如果可以,那就去吧。这将为您提供尽可能多的控制权。

如果没有,那么做多平台应用程序最无痛的方法就是Java with Swing。所有其他人都需要安装额外的软件(“哦,你也需要Python?”),或者运行本地库(“OpenGL,你需要这个 dll”)。保持简单。

可以在http://java.sun.com/products/java-media/2D/samples/index.html获得关于Java2D可以做什么的Sun演示 - 使用Applet和插件链接。

答案 6 :(得分:-1)

如果您正在处理'大'数据和图表,您可能想要使用OpenGL(因为您需要多平台和'大'表示非常规吞吐量的要求;另一方面,您似乎认为网络可以为您提供“大”数据 - 除了平铺技术,如谷歌地图/深度缩放,对于大型数据集上的小视图,您实际上没有“大”数据的带宽)。

如果您很好地构建应用程序,那么只要您使用便携式标准代码编写数据处理并将演示中的大部分工作投入到跨平台API中,您需要的Chrome数量可以是易于抽象,并使平台特定和数据驱动。基本上对于每个平台,创建一个gl上下文并放置你需要的任何菜单 - 调整'跨平台'解决方案的工作量,使其在不同平台上看起来不错,并不比创建简单chrome的工作量少得多在一些平台上 - 大多数努力都被认为是,而不是编码。如果您使用大量小部件而不是基于视图的应用程序,这当然不适用。