2010-07-08 10 views
22

Actualmente tengo un backend de C++ que necesito conectar con una GUI, y como nunca antes había construido una GUI, estaba confundido sobre dónde comenzar.Java vs. C++ para construir una GUI que tiene un backend de C++

Me siento cómodo escribiendo código en C++ y Java, por lo que preferiría que mi GUI estuviera en uno de esos idiomas. Además, la GUI tiene que ser razonablemente independiente del sistema operativo en Windows y Linux (y con suerte, por lo tanto, Mac).

Ahora entiendo que si uso Java para hacerlo, necesitaré algunas envolturas para hacerlo, pero también he escuchado (estrictamente de segunda mano) que escribir una GUI en C++ es un problema.

no quiero volver a escribir demasiado de mi código de fondo en Java (que no ??) y que estaba esperando para la entrada en:

  • ¿Alguno oferta lenguaje graves ventajas/desventajas en comparación con el ¿otro?
  • ¿Qué tan grave es el problema de envoltura, y cuánta reescritura entraría si utilizo Java.
  • ¿Hay algún recurso específico que deba considerar que la gente considere relevante?

Gracias y Saludos :) Todo

+10

Implementaría la GUI en el ensamblaje. –

+2

Aún necesita una biblioteca, o al menos un protocolo, para orientar. –

+4

@Hamish Grubijan: ¿Ah, sí? ¡Bien * I * implementaría GUI en código de máquina sin formato! – Randolpho

Respuesta

11

Dice que ya conoce C++ y Java, y que nunca antes hizo una GUI. Eso significa:

  • no importa si usted va para una GUI Java o A ++ GUI C, tendrá que aprender a manejar el marco GUI
  • si elige Java, también hay que aprender a interactuar entre los dos idiomas

Así que quedarse en C++ le ahorra una cosa para aprender. Bueno, siempre es una buena idea aprender algo, pero podría ser una mala idea aprender dos conceptos nuevos al mismo tiempo. De todos modos, el aprendizaje podría ser la carga más pequeña, supongo que hay mucho trabajo real invocado, incluso cuando se utilizan herramientas como SWIG.

Es posible que desee saber si escribir una GUI en Java o hacerlo en C++ es más fácil. Depende del Marco elegido. Para Java, tiene AWT y Swing, que son parte de la distribución Java predeterminada, y luego está SWT, que es utilizado por Eclipse, por ejemplo. Para C++, hay muchos kits de herramientas, siendo Qt, GTK y wxWidgets los más populares, y los tres son compatibles con todas las plataformas principales. La mayoría de esos kits de herramientas GUI "C++" también tienen un enlace Java o incluso un puerto Java, por lo que también puedes usarlos con Java.

Hasta ahora he usado Swing, Qt y algunos otros que no ayudan en su situación (La interfaz de usuario que vino con Borland C++ Builder y WinForms en .NET).Básicamente, los conceptos son los mismos para todos esos marcos, y ninguno de ellos resultó ser más difícil o más fácil que el otro. La única excepción puede ser Java, porque nunca obtuve esos LayoutManagers para que funcionen, a pesar de que los otros toolkits tienen equivalentes a los LayoutManagers que son fáciles de dominar. Pero tal vez sea solo yo.

Las personas también le dirán que las GUI de Java son siempre feas y no se ajustan al sistema host. Bueno, la mayoría de las GUI de Java sí lo son, pero en mi humilde opinión no es por Java, sino por la mala programación. Se necesitan dos líneas de código para permitir que una aplicación Swing se adapte a la apariencia del sistema operativo, y la mayoría de los programadores simplemente no ponen suficiente esfuerzo en sus GUIs de Java para copiar y pegar esas dos líneas ... pueden imaginarse cuánto les importa el resto de su diseño de GUI.

Para su situación actual, recomendaría una GUI de C++, pero si sabe cómo se ven sus planes futuros, y si sabe que hará GUIs de Java por el resto de su vida, entonces probablemente sea correcto comenzar con eso ahora y toma el esfuerzo extra de.

Y si elige C++ para la GUI, la gente le dirá todo tipo de cosas para tirar de ti en cualquier dirección. Todos los tres grandes frameworks portátiles tienen sus pros y sus contras, pero no creo que haya ninguno mejor o peor entre ellos. Recomendaría Qt simplemente porque ya lo usé, pero si hubiera deseado usar GTK o wxWidgets, probablemente lo sugeriría.

34

Eche un vistazo a Qt.

En mi experiencia, la comunicación entre dos tiempos de ejecución de idiomas diferentes siempre es un desafío. Si tiene una aplicación no trivial para compilar lo siguiente, a menudo plantea desafíos: -

  • Gestión de errores.
  • Administración de memoria.
  • Multithreading y sincronización Semántica.

Aparte de aumentar un nivel de indirección debido a las envolturas, se requiere una gran cantidad de pensar como las circunstancias en las que necesita para pasar a través de las estructuras de datos y la interfaz gráfica de usuario backend etc.

Por ejemplo: - considerar la aprobación un Java String desde la GUI al backend C++. Esencialmente, tenemos que extraer los caracteres de un objeto Java String y ponerlos a disposición del desarrollador C++ sin que se filtre la memoria que los contiene. Este es un ejemplo de un problema básico (también hay otros aspectos como la codificación en la que se deben devolver los caracteres).

4

No puedo decir mucho sobre el acoplamiento de Java y C++, pero sugiero que eche un vistazo a Qt. Es una biblioteca C++ para muchas cosas, como acceso a archivos y redes, pero es más famoso por el desarrollo de GUI. También tiene un buen IDE donde puedes construir tu GUI con arrastrar y soltar. También diría que Qt es tan independiente del sistema operativo como lo es para las bibliotecas de GUI.

2

Escribir una GUI en C++ no es más una molestia que hacerlo en Java.

Existen numerosas bibliotecas de GUI multiplataforma. GTK, gtk--, FoX, WX, etc. No recomendaría Qt ya que no es realmente C++ (usa una versión extendida del lenguaje que requiere un preprocesador especial antes de la compilación). Además, cuesta una fortuna si no quieres regalar tu producto.

Por cierto, así no es como se usa la palabra "por lo tanto".

+9

* Muchas aplicaciones comerciales * pueden usar Qt a través de la LGPL sin costo. –

+1

+1 por no recomendar Qt. También mencionaría Ultimate ++, gtkmm y FLTK entre las bibliotecas portátiles de C++. –

+0

Comprobaré GTK - gracias :) En cuanto a la palabra 'Por lo tanto', la utilicé en el contexto de que mi GUI que funciona en Linux se traduciría a Mac OS X. No establecí la parte de OSX claramente, Lo admitiré, pero he visto por lo tanto usado en el texto publicado de manera similar. Pero, de nuevo, las interpretaciones hacen un lenguaje ... – sparkFinder

-1
  1. Envolver no está reescribiendo, es solo un adaptador para que ambos idiomas se encuentren. Es sencillo
  2. Como no parece estar fijo en un idioma, elegiría .NET Gui (Con C++ CLR) tendrá una GUI que es independiente de la máquina y puede comunicarse fácilmente con su código existente.

Para principiantes WinForms es quizás más fácil, pero intente utilizar WPF, es la variante más moderna para el desarrollo de GUI en el mundo .NET.

Personalmente, utilizaría C# /. NET para la GUI y usaría una DLL C++ CLR. Pero no es la única solución.

En Linux, la mejor implementación de .NET es MONO. Para todas las aplicaciones de WinForms que he desarrollado (no son las más locas), corrieron sin cambios. Con C++/Qt, tendrá que volver a compilar para cada sistema operativo objetivo.

+0

Solicitó plataforma independiente. Windoze, Linux y Mac. Creo que eso cuenta C# /. NET. – bradgonesurfing

+0

La versión Mono de GTK podría permitirlo. –

+0

Un voto a favor, sabía que era una idea estúpida hacer una sugerencia de .NET a fanáticos de C++ :-D – jdehaan

-1

No utilice Java para crear GUI a menos que la independencia de la plataforma sea obligatoria. La experiencia del usuario será lenta y la interoperabilidad con C++ será un problema.

Para crear GUI nativa en C++, puede usar GTKmm junto con una biblioteca como Boost o QT. Además, estas bibliotecas están disponibles para la mayoría de las plataformas (GNU/Linux, Windows, OS X), por lo que su aplicación se puede recompilar en cualquier lugar.

editar: use GLADE para crear rápidamente GUI y complete las ranuras de señal con el código C++ en GTKmm.

+1

Entonces, ¿cómo se podría decir que usar gtkmm en C++ plantea problemas de independencia de la plataforma? – sparkFinder

+0

gtkmm no plantearía ningún problema de independencia de la plataforma a excepción de la distribución, solo que necesita recompilar su aplicación para cada plataforma. usando Java, podría regalar archivos jar. – Max

+0

Al usar Java, simplemente regala archivos jar junto con compilados para cada backend de C++ de plataforma: en este caso. –

7

Dependiendo de sus necesidades, una interfaz web simple podría ser la más simple cuando no tiene un código de interfaz existente. Incruste un pequeño servidor web en su aplicación y abra un navegador en "http://localhost:12345" (o qué puerto terminará usando).

+0

voto a favor? ¿Por sugerir una guía web? Oh, bueno :) –

+1

fanáticos, te digo ;-). Esta es también una buena alternativa, cuántas aplicaciones están habilitadas para la web en la actualidad ... Creo que leen la Web y eso asusta a los que votan negativamente. Te puse de nuevo en el nivel 0. :-) – jdehaan

1

No mencionó la riqueza de la interacción entre el frente y la parte posterior, lo que ponderaría la importancia del idioma existente en su decisión.

He trabajado con Qt, Swing y SWT, y normalmente utilicé código C++ y Java con todos estos toolkits. La interacción entre idiomas puede agregar un costo/riesgo adicional. Sin embargo, a veces ese costo se justifica dado otros beneficios.

Si por alguna razón eliges una interfaz Java, mira JNA y SWIG.

2

Seamos honestos aquí. C++ simplemente no está en el mapa cuando se trata de GUI portátiles.

Java tiene un conjunto de herramientas de interfaz gráfica de usuario madura, coherente, portátil, ampliamente utilizada, completamente documentada. C++ tiene un montón de bibliotecas de OSS a duras penas que funcionan, ninguna es realmente portátil, además de algunas bibliotecas comerciales caras que no funcionan en todos los objetivos que afirman, funcionan mal en los objetivos restantes, e invierten el control para que usted sea atrapado en su marco extraño.

A menos que necesite C++ por otras razones (de las cuales hay muchas), elija Java para la GUI. La codificación cruzada es trivial para alguien que conoce ambos idiomas, pero puede ser difícil de gestionar, por lo que querrá minimizar la interfaz nativa lo mejor que pueda. Mi consejo aquí es hacer un pacto con su equipo que nunca intentará contener punteros (o referencias) a través de la interfaz. Simplemente se vuelve más desordenado si lo haces, y ningún depurador puede salvarte cuando las líneas se enreden. En su lugar, use enteros o claves de cadena y páselos a través de la interfaz nativa.

+3

Si bien puedes ser honesto, estás mal informado. Las mejores y más populares bibliotecas de UI están escritas en C, C++ o C#. Java no se ve bien incluso en UNA plataforma, no importa la plataforma cruzada. – rpg

+2

El problema es: ambos tienen razón (John y RPG). Las bibliotecas de UI de C++ no son muy buenas y la UI de Java no se ve bien en ninguna plataforma. –

+2

No se trata de estar informado. Es una cuestión de ser experimentado. :) Tengo experiencia profesional con casi todas las herramientas GUI escritas, portátiles o nativas. Java es lo mejor que hay en términos de toolkit. En términos de cómo se ve ... bueno, tienes un punto. La GUI de Java se ve mejor que las aplicaciones web arbitrarias, y es mejor que los kits de herramientas menores como Tk, FLTK, etc., pero peor que los kits de herramientas de escritorio nativos (.NET, Cocoa). De ninguna manera es perfecto. Aunque no me gusta Java en general, tengo que dar crédito por el crédito y admitir que el conjunto de herramientas GUI de Java es bastante sólido. – John

1

¿Qué tal eclipse? Se ve bien y funciona bien en todas las plataformas. Mi suposición es que la mayor parte del eclipse es Java.

+1

IBM lo usó para Notes, pero está lejos de ser un marco de GUI de propósito general. – MSalters

0

Por qué no aprende la GUI nativa de C++ como WINAPI o X11. Luego, hace que el software de la consola sea compatible con winehq, cygwin u otra compatibilidad de fuentes abiertas o software emulado. Ya que nunca desarrolló GUI en C++. No vayas por Java porque haz más tamaño cargado en la RAM. A menos que tenga un gran tamaño de RAM. Eclipse puede utilizar 500 MB de RAM cuando se ejecuta sin proyecto abierto.

Cuestiones relacionadas