2010-05-15 16 views
8

Encontré que muchos programas Java en Windows usan el archivo por lotes .bat como iniciador de programas. Se ve raro si se compara con otros programas que usan el archivo ejecutable .exe.¿Por qué los programas Java usan el archivo .bat como iniciador de programa?

¿Por qué los programas Java no pueden usar el archivo .exe? ¿Es eso una limitación del programa Java?

Gracias.

+0

No hay nada que le impida compilar un programa Java en un archivo .exe. Nada en la especificación del lenguaje dice que no tiene permitido compilarlo en .exe. – Cam

Respuesta

12

Es bastante fácil crear un archivo .bat e incluir el java -jar <archive-path> en él y lo tiene en ejecución. Puede editar el archivo .bat fácilmente y configurarlo más. Todo lo que necesitas es bloc de notas.

También se parece bastante a los archivos de script bash para Linux, por ejemplo. Esto hace que un archivo .bat para la ejecución de un programa en .jar se transfiera fácilmente de Win a Linux.

Mientras que un archivo .exe no es fácilmente modificable (en su caso) y produce algunos meta-datos, el archivo .exe resultante es más grande ... EXE también es una extensión de archivo específico de Windows ...

Por supuesto, si desea empaquetar todo en un solo archivo y hacer que el usuario no se preocupe por eliminar el archivo .jar pero aún tener el bate ... ese es otro caso.

9

el archivo por lotes se ejecuta a menudo "java -jar" y, además, agrega parámetros de JVM; esto no se puede agregar al archivo jar.

es más rápido para escribir archivo bat que envuelva archivo java a exe - esas herramientas son a menudo comercial o no funcionan bien ...

también, no hay muchas ventanas ejecutables nativos (.exe) hecho en Java (sin embargo, aún es posible - vuze, limewire, etc.)

+0

Para los programas Java "nativos" que refiera al ejecutable PE hace poco más que iniciar la JVM (generalmente en una DLL) e iniciar un archivo jar, lo mismo que hace el archivo por lotes, solo un poco más oculto. Puede ir un paso más allá e insertar el contenedor en el archivo ejecutable, pero dudo que lo haga a menudo. – Joey

+0

sí, pero la pregunta no era cómo distribuir programas Java, sino qué archivos de proceso por lotes ... – Xorty

4

Java no se compila en .exe. Se compila en una máquina virtual, la JVM. Este es el aspecto fundamental de la tecnología de la plataforma Java.

El .bat es esencialmente un script de shell para Windows. Ejecuta un .exe, p. java.exe del JRE que luego ejecuta el código de Java compilado en bytecode.

+7

.NET CIL tampoco es código nativo, pero reside en un archivo PE normal. No es que Java no pueda hacer lo mismo, es solo que los diseñadores no lo hicieron. – Joey

-1

Buena pregunta. También me pregunté por qué Sun nunca proporcionó alguna herramienta para generar un .exe.

Un exe-file es mucho más fácil de usar que un bat-file. Tiene un bonito icono etcetara.

vez escribí algo a mí mismo: http://www.bitstorm.org/jarx/

+0

No, en términos de facilidad de uso para el usuario, el usuario ni siquiera ve qué tipo de archivo es, simplemente hace clic en un atajo. –

+0

Java se puede construir en JAR, que es lo mismo en JVM que EXE en WIN. – Cipi

0

Un archivo por lotes se puede instalar la JVM con la ruta de clase necesaria, etc y decirle que se ejecute un frasco o clase o clases en un frasco. Es excesivo y más trabajo producir una imagen PE ejecutable solo para emitir uno o dos comandos para iniciar la JVM y decirle que abra una jarra.

0

Bien ... debe usar el archivo por lotes si desea ejecutar .class archivo por ejemplo. Desea utilizar el lote porque debe pasar el URI del programa Java a la máquina virtual Java (también un programa) para que pueda ejecutarlo.

Pero puede construir el programa Java para que sea ejecutable, igual que EXE (solo tiene que hacer doble clic para ejecutarlo). Su extensión es .JAR, y algunas veces necesita asociar .JAR extensión a Java Platform Binary (o similar) para lograr esto. Luego pasa a Windows para pasar el URI de su aplicación java a la máquina virtual java, por lo que se ejecuta.

Para hacer esto en NetBeans, ejecute el comando Compilar, y en la carpeta del proyecto encuentre la carpeta dist, y allí verá un ejecutable java.

Exe, o ninguna exe, la funcionalidad es la misma desde la perspectiva del usuario, por lo que no hace metros ...

Una NOTA

programas Java son independientes de la plataforma, por lo que el proceso de diferentes plataformas de ejecución puede ser diferente. Si Java fuera solo para Windows, estoy seguro de que SUN lo haría compilar a Windows EXE.

-1

Puede, la herramienta de creación de instalación multiplataforma podría crear una para usted. Por ejemplo, InstallAnywhere, creará un ejecutable de Windows para su aplicación java.

Sun era una empresa que sigue la regla 80/20, obtienen las cosas más importantes para trabajar, pero nunca lo hacen funcionar bien. Por ejemplo, compare el complemento de Java para detectar el navegador e instálelo en adobe flash. Flash fue rápido y fácil hace muchos años, mientras que el plugin de java a menudo lo reenvía al sitio del sol, y eso es todo.

Volviendo al ejecutable, el modelo java se escribe una vez, ejecuta muchas, cuando Sun decida proporcionar un iniciador, deberán proporcionarlo para toda la plataforma. Por ejemplo, se necesitaría un JDK de Windows para proporcionar los iniciadores para Windows x86, ia64, amd64, linux/unix pueden compartir un iniciador ya que todos usan scripts de shell compartidos. Entonces la pregunta es, ¿el sol muestra un paquete para Mac? Simplemente no encaja, definitivamente debes buscar en herramientas como installanywhere e install4j, todas incluyen lanzadores de Java.

+0

La forma estándar de distribuir una aplicación de escritorio es usar Java Web Start. Y esa afirmación de que Sun no hace que las cosas funcionen bien es muy controvertida. Java funciona bien para mí. –

+0

Sun definitivamente no era * una empresa que siguiera la regla 80/20. Parece que no sabes mucho sobre la historia de Sun. –

0

Bienvenido al mundo de los scripts de shell de DOS. Puede hacer que un archivo jar sea ejecutable, pero si solo tiene archivos de clase Java, lo mejor que puede hacer es escribir un pequeño script para ejecutar su programa java.

-3

Puede usar autoit para crear muy rápidamente un exe con un icono personalizado que se vería más profesional que solo un archivo .bat.

0

Los programas de Java se diseñaron desde cero para ser ejecutados no por el sistema operativo sino por una máquina virtual. Cuando "ejecutas un programa java", en realidad estás iniciando una máquina virtual y diciéndole que cargue tu programa.

Así es como fue diseñado. No es que estuvieran holgazaneando en el departamento de calidad (una respuesta sugirió que Sun solo obtiene un producto con una finalización del 80%), fue una decisión consciente. Y dado que es extremadamente trivial crear un archivo por lotes, acceso directo, script de shell o ejecutable que proporcione el iniciador de un solo clic, no fue necesario agregar la capacidad de convertir un programa Java en .exe (en el caja de ventanas).

2

En realidad, un buen montón de aplicaciones Java do uso lanzadores nativos en lugar de secuencias de comandos por lotes: Eclipse, NetBeans, IntelliJ IDEA, JRuby y Vuze son solamente algunos de los ejemplos.

La razón principal por la que la gente no hacer esto más a menudo, es que la incorporación de una JVM en C es en realidad un poco complicado y si usted puede conseguir lejos con el lanzamiento desde un script por lotes, entonces ¿por qué preocuparse?

0

Mis dos razones son:

  1. Muchos constructores instalador no permiten la creación de un acceso directo del menú de programas que contiene, por ejemplo, java -jar whatever.jar a menos que de alguna manera de configurar el instalador para aceptar java como un programa existente en la máquina objetivo. Esto puede ser difícil o imposible, mientras que crear un acceso directo a un archivo BAT incluido en la distribución es muy fácil.
  2. Según lo manifestado por otros: es necesario agregar parámetros de inicio de JVM según la configuración de la máquina host.
Cuestiones relacionadas