[Programación] Duda sobre Java

Vereis, estoy comenzando con el java, y tengo una duda sobre los packages. He visto algunos ejemplos, y a veces aparece una linea tal que esta al principio del .java

package loquesea.otracosa.algomas;

Luego vienen los imports, y finalmente algo del estilo:

public class nombredelarchivojava ....
....
....


Mi duda es qué hace la linea "package". Yo supongo que sirve para juntar varios .java en un "paquete", pero no sé como hacerlo funcionar.
Un Package es como has dicho un paquete, típico en todo lenguaje de programación, permite ordenar los archivos en diferentes niveles.

Cuando almacenas el programa Java en un .jar los archivos .class se almacenarán en sistema de directorios con esa estructura.

Puede parecer de primeras raro y sin sentido, y pensar que para que hacer paquetes, ponerlo todo junto.

Pero cuando tienes un sistema con 500 archivos, resulta más comodo tenerlos ordenados.

No comprendo a que te refieres con hacerlo funcionar...
Ya veo... lo que pasa es que si copio-pego un código que incluya una linea con lo del package, me da un error de compilacion que desaparece completamente si borro dicha linea.

Por cierto, estoy trabajando con J2ME, aunque supongo que este tema será exactamente igual para la versión del hermano mayor.
La linea package simplemente determina el paquete al que pertenece la clase que se declara a continuación. Por eso es normal que te dé el error de compilación si la copias tal cual de otro archivo.
Los packages los creas tu. Si copias/pegas clases de otro sitio y que tienen distinto path logicamente te dará error puesto que no coinciden con el tuyo. Si usas eclipse creo recordar que te lo corregia.

No se si me he explicado...

ByEs [buenazo]
Lo que uso es el Sun Java Wireless Toolkit para crear un proyecto. Se me crea una estructura de carpetas para dicho proyecto al hacerlo: bin, classes, lib, res, src, tmpclasses y tmplib. Con el Notepad++ creo/edito el .java que coloco en la carpeta src. Luego le doy a build (para compilar y preverificar), y listos, se crea el .jad y el .jar.

No uso eclipse, pero aun usándolo creo que no me sería muy útil (y digo CREO), porque lo que quiero es tener claro un ejemplo en el que vea el funcionamiento del package... Llevo ya tiempo encallado con esto y me parece que es una tontería... :-(
¿Como puedo crear un package?
QAS escribió:Lo que uso es el Sun Java Wireless Toolkit para crear un proyecto. Se me crea una estructura de carpetas para dicho proyecto al hacerlo: bin, classes, lib, res, src, tmpclasses y tmplib. Con el Notepad++ creo/edito el .java que coloco en la carpeta src. Luego le doy a build (para compilar y preverificar), y listos, se crea el .jad y el .jar.

No uso eclipse, pero aun usándolo creo que no me sería muy útil (y digo CREO), porque lo que quiero es tener claro un ejemplo en el que vea el funcionamiento del package... Llevo ya tiempo encallado con esto y me parece que es una tontería... :-(
¿Como puedo crear un package?



Es una estructura de carpetas.
Es decir, si quieres tener tu paquete:

package com.qas.mobile;

Y fdentro de mobile tienes un archivo por ejemlpo Test:

package com.qas.mobile;

public class Test {
public static void main(String[] args) {
System.out.println("Hello world");
}
}


Y este trozo de clase está dentro de la carpeta com.qas.mobile

Es decir te creas donde tengas el proyecto pues una carpeta com
dentro una qas y dentro mobile y ahí pones el fichero.
supreme , he hecho lo que dices (de hecho gracias por el ejemplo, ya que lo he entendido todo mucho mejor) y compila! El problema es que un mismo programa sin package funciona y con package da un error en ejecución.

HelloWorldPackage, HelloWorldPackage
Exception: java.lang.ClassNotFoundException:
HelloWorldPackage


El código es el siguiente:
HelloWorldPackage.java escribió:package com.qas.mobile;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class HelloWorldPackage extends MIDlet implements CommandListener {
private Command exitCommand;
private Display display;
private Form screen;

public HelloWorldPackage() {
// Obtenemos el objeto Display del midlet.
display = Display.getDisplay(this);

// Creamos el comando Salir.
exitCommand = new Command("Salir", Command.EXIT,2);

// Creamos la pantalla principal (un formulario)
screen = new Form("HelloWorld");

// Creamos y añadimos la cadena de texto a la pantalla
StringItem saludo = new StringItem("","Hola Mundo...");
screen.append(saludo);

// Añadimos el comando Salir e indicamos que clase lo manejará
screen.addCommand(exitCommand);
screen.setCommandListener(this);
}

public void startApp() throws MIDletStateChangeException {
// Seleccionamos la pantalla a mostrar
display.setCurrent(screen);
}

public void pauseApp() {
}

public void destroyApp(boolean incondicional) {
}

public void commandAction(Command c, Displayable s) {
// Salir
if (c == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
}
}
A ver:
package mipaquete;

Significa que este .java pertenece al paquete mipaquete.

Si pones com.qas.mobile, que suena a paquete predefinido, normal que te de error.

A no ser que quieras que forme parte del paquete com.qas.mobile.

Si te da error,pon el error que te da no digas simplemente "Da error",pegalo aqui los errores estan para eso, para informar.
wah_wah_69, ¿has entendido bien mi último post? Es que creo que te lo has leido todo muy por encima...

He creado la carpeta com, dentro he creado la carpeta qas, dentro he creado la carpeta mobile, y dentro he metido HelloWorldPackage.java
Ya se que podría haber puesto cualquier otra cosa, pero he seguido el ejemplo de supreme.

Respecto al error que me da, lo he puesto también:
QAS escribió:HelloWorldPackage, HelloWorldPackage
Exception: java.lang.ClassNotFoundException:
HelloWorldPackage
¿cómo lo compilas y ejecutas? ¿desde dónde?
QAS escribió:wah_wah_69, ¿has entendido bien mi último post? Es que creo que te lo has leido todo muy por encima...

He creado la carpeta com, dentro he creado la carpeta qas, dentro he creado la carpeta mobile, y dentro he metido HelloWorldPackage.java
Ya se que podría haber puesto cualquier otra cosa, pero he seguido el ejemplo de supreme.

Respecto al error que me da, lo he puesto también:


Pues creo que eso es problema con el classpath.

Pero por si acaso dale un repasito a:
http://java.sun.com/docs/books/tutorial/java/package/packages.html
Pregunta:
Darkoo escribió:¿cómo lo compilas y ejecutas? ¿desde dónde?

Anterior respuesta:
QAS escribió:Lo que uso es el Sun Java Wireless Toolkit para crear un proyecto. Se me crea una estructura de carpetas para dicho proyecto al hacerlo: bin, classes, lib, res, src, tmpclasses y tmplib. Con el Notepad++ creo/edito el .java que coloco en la carpeta src. Luego le doy a build (para compilar y preverificar), y listos, se crea el .jad y el .jar.

No uso linea de comandos en ningún sitio. Aunque podría (tengo un par de tutoriales que indican como), no sé desde donde hacerlo con este programa. De todas formas, al darle al botón Build, no me sale ningún error. Luego le doy a Run, se me abre el emulador de teléfono móvil, y al intentar ejecutar desde ahi el programa, peta.


wah_wah_69 escribió:Pues creo que eso es problema con el classpath.

Al ser todo automático, ¿podría ser esto que dices?
Respecto a la web, gracias, pero no me termino de aclarar con lo que dice, y hasta donde llego creo que no me pueda ayudar a resolver el problema.

Mirad, os pongo todo lo que va saliendo en el Sun Java Wireless Toolkit:
//Cargo el proyecto
Project "HelloWorldPackage" loaded
//Le doy a Build (compila y preverifica)
Project settings saved
Building "HelloWorldPackage"
Build complete
//Le doy a Run y se abre el emulador de móvil en otra ventana (carga el programa en el emulador)
Running with storage root C:\Documents and Settings\QAS\j2mewtk\2.5.2\appdb\DefaultColorPhone
Running with locale: Spanish_Spain.1252
Running in the identified_third_party security domain
//Desde el emulador le doy a Launch (ejecuta el programa desde el emulador)
Unable to create MIDlet HelloWorldPackage
java.lang.ClassNotFoundException: HelloWorldPackage
at com.sun.midp.midlet.MIDletState.createMIDlet(+29)
at com.sun.midp.midlet.Selector.run(+22)
//Aqui salgo del emulador
Execution completed.
3446326 bytecodes executed
776 thread switches
1668 classes in the system (including system classes)
17836 dynamic objects allocated (538936 bytes)
2 garbage collections (463340 bytes collected)

No sé por donde pillarlo [decaio]
12 respuestas