¿como abrir archivos java?

quiero abrir un archivo java. lo puedo abrir de forma gráfica sin problemas, pero, me es más cómodo hacerlo desde terminal, algunas veces, entonces… ¿que comando utilizo para abrirlo? utilizó openjdk. busque los comandos en internet, y decian que utilizara “java -jar” eso no me funciono.

No sé mucho de java, pero, tengo entendido de que

java -jar

Ejecuta los .jar, no los .java

Pero, estuve desarrolando, aunque en c, un programa de código abierto que te gestiona desde consola un proyecto java.

Si compilar el proyecto, instalandolo en /usr/bin, tendrás los siguientes comandos:

sdk build
Construyes .class desde .java

sdk run
Corres los .class

sdk jar run
Construyes un .jar, desde los .class hechos a partir de los .java

Primero haces:
sdk proyecto nuevo [nombre del proyecto]
cd [nombre del proyecto]

Tu Código java tiene que dejarse en:

src/main/Main.java
archivo pricipal

Después, cada paquete java tiene que estar dentro de src, con una carpeta que se llame como el paquete, y dentro los .java del paquete.

Si no tienes paquetes, pon todos los .java dentro de src/main/

Le haces, desde la raíz del proyecto:

sdk build
sdk jar

Y, tienes tu .jar en el directorio export/

Entras ahí, y puedes usar java -jar

P.D.: Ante cualquier problema, estoy encantado de ayudarte, para seguir mejorando mi software…

me sale todo esto:
java -jar EditorArquivoBMG\ r22.jar
Exception in thread “main” java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibility.AtkWrapper
at java.desktop/java.awt.Toolkit.newAWTError(Toolkit.java:475)
at java.desktop/java.awt.Toolkit.fallbackToLoadClassForAT(Toolkit.java:491)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1715)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
at java.desktop/java.awt.Toolkit.loadAssistiveTechnologies(Toolkit.java:540)
at java.desktop/java.awt.Toolkit.getDefaultToolkit(Toolkit.java:601)
at java.desktop/java.awt.Toolkit.getEventQueue(Toolkit.java:1489)
at java.desktop/java.awt.EventQueue.invokeLater(EventQueue.java:1316)
at editorarquivobmg.gui.TelaPrincipal.main(TelaPrincipal.java:567)
Caused by: java.lang.ClassNotFoundException: org.GNOME.Accessibility.AtkWrapper
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:534)
at java.base/java.lang.Class.forName(Class.java:513)
at java.desktop/java.awt.Toolkit.fallbackToLoadClassForAT(Toolkit.java:488)
… 14 more

Me pusiste solo el output del error, con eso poco puedo hacer…

¿Podrías dar más información? ¿Usas el mío, la gráfica o manualmente desde la terminal?

Si es el mio, necesitaría ver el directorio con el código…

utilice el openjdk que ya tenia instalado. y utilice un programa para editar archivos bmg. que por alguna razon ya no me esta funcionando. hice esto desde la terminal.

Proba mi programa.

git clone https://github.com/Feavr555/Hispa-IDE-SDK-Java.git
cd Hista-IDE-SDK-Java
make linux_shared
sudo make install

Tras eso.

sdk proyecto nuevo [nombre del proyecto sin espacios]
cd [nombre del proyecto]

Pone tus .java en src/
Si todo esta en el paquete main, en src/main
Sino, pones en src/ las carpetas que serían tus paquetes.
Todo en la raíz del proyecto

sdk package [nombre del paquete] [nombre del .java]

Luego.

sdk build
sdk jar run

También, puedes ver cómo hago las cosas desde la terminal con el Makefile:

Con:
make
Genera los .class con .java

make jar
Genera un .jar con los .class

Requiere la misma estructura de carpetas que el programa sdk

Dentro del Makefile puedes ver cómo se hace con los comandos.

Pon:

mkdir obj_linux

sdk build
De .java a .class

sdk run
Ejecuta

sdk export
Covierte de .class a .jar

sdk jar
Ejecuta el .jar

Sino, tienes el Makefile, para ejecutar y armar el .jar de la misma forma que hace el sdk

Lo siento, habia estado ocupado

Tenes desactualizado el compilador de c…
Actualizalo, así tenes bien el estandard de c23, o cambia el -std=c23 por -std=2x.

¿como hago eso? tambien te digo, java me volvio a funcionar… solo que ahora funciona de forma… rara

Para actualizar el compilador, actualiza tu distro de linux.
Sea con apt-get update/upgrade o pacman -Syu…

Si no actualiza, metete en el Makefile (editor de texto), y cambias -std=c23 por -std=c2x
Uno es el standard de c 23 (del 2023) y el otro es el pre alpha del mismo.

Sino, en el directorio bin/debug (dentro del repositorio que clonaste) hay otro Makefile, si lo copias en la raíz del proyecto de java, tienes:

make
compila los .java a .class

make jar
compila los .class a .jar y lo ejecuta

Puedes usar java [archivo.java] para clases sencillas y funciona además de se puede compilar usando javac compilarlo e ir por ahi

1 me gusta
COMPILER		= javac
EXECUTE			= java
FLAGSC			= -d bin
FLAGSE			= -cp bin
EXPORT			= jar cvfe
EXECUTEJAR		= java -jar
MAIN			= main.Main
MAINFREE		= Main

CARPETA			= mkdir -p export
PROGRAM			= export/program.jar
SRC			= $(wildcard src/*/*.java)
SOURCE			= -sourcepath . $(SRC)

CLASS			= $(wildcard src/*.java)

OBJECTS			= $(foreach classfile,$(wildcard bin/*/*.class),-C bin $(classfile:bin/%=%))

FREEOBJECTS		= $(foreach classfile,$(wildcard bin/*.class),-C bin $(classfile:bin/%=%))

execute: class
	$(EXECUTE) $(FLAGSE) $(MAIN)

class: $(SRC)
	$(COMPILER) $(FLAGSC) $(SOURCE)

export: class
	$(CARPETA)
	$(EXPORT) $(PROGRAM) $(MAIN) $(OBJECTS)

jar: export
	$(EXECUTEJAR) $(PROGRAM)

filesclass: freeclass
	$(EXECUTE) $(FLAGSE) $(MAINFREE)

freeclass: $(CLASS)
	$(COMPILER) $(FLAGSC) $(CLASS)

freeexport: freeclass
	$(EXPORT) $(PROGRAM) $(MAINFREE) $(FREEOBJECTS)

freejar: freeexport
	$(EXECUTEJAR) $(PROGRAM)

Puedes ver aquí cómo usar java para .java, .class, .jar…


me da a mi el que programa no me funcionara.

Cuando escribi el Makefile,

make
Para compilar desde linux para windows, si no tienes el compilador cruzado no podrás compilarlo, además, genera un .exe

make linux_shared
Para compilar un ejecutable para linux dinámico (ya que el estático no funciona bien).

En el directorio bin/debug está el Makefile para usar con
make
make jar

El cuál, además, tiene que ser copiado en el directorio raíz de tu proyecto de java.

Buenas, si lo que quieres es ejecutar un archivo .java, primero tienes que compilarlo.
Para eso se usa el siguiente comando:

javac [archivo.java]

Si no hay errores de sintaxis, se creará un archivo .class, que es el archivo binario que interpretará tu máquina (y cualquiera que tenga Java instalado, es lo que lo hace multiplataforma). Para ejecutar el programa, tenemos que ejecutar el propio .class, lo cual se hace de la siguiente manera:

java [nombreDelArchivo]

Cabe recalcar que no es necesario poner la extensión .class, con solo poner el nombre vale, y ya estaría, tu programa se ejecutará.


He visto confusión con los .jar.
Estos son archivos comprimidos los cuales pueden guardar varios varios .class y otros recursos. Son útiles para programas mas grandes, ya que facilitan la distribución y la integridad del código.
Estos si que se ejecutan con java -jar.

1 me gusta

Mi programa, o el Makefile que tiene en bin/debug, hace uso de esos comandos, automatizados para que sean más fáciles de usar en consola y con varios archivos y varios paquetes…

Supongo, pero bueno, el saber no ocupa lugar.
Ademas, que para una ocasión puntual es mas fácil ejecutar un par de comandos que clonar un repositorio de GitHub, pelearse con las versiones de C…

Sin mas, que tu proyecto esta muy guapo, y sobro todo puede llegar a ser útil, pero entender la base que hay por debajo también es importante.

Además si lo pone en la parte de principiantes se intuye que es que no tiene tantos conocimientos avanzados yo por ejemplo se que usando java a secas puedes ejecutar .java que no sean muy grandes si son versiones relativamente nuevas creo y que se usa javac para sacar el class y demás aunque no me acordara tal y como tu has dicho eso es la base si utilizas un IDE o cualquier otro programa del estilo usan eso en la base para luego ejecutar el codigo