lunes, 31 de octubre de 2011

Problema de dependencias "Cannot compile against a module..." en NetBeans Platform

Hola.

En la semana me enteré de un componente curioso llamado Sticky Note vía el blog de Geertjan e intenté ejecutar el ejemplo de Geertjan:
como sea, el caso es que intenté compilar su ejemplo para probarlo y la sorpresa esta vez fue algo como esto:

Cannot compile against a module: .....\org-netbeans-modules... org-netbeans-api-visual.jar because of dependency: org-netbeans-api-visual.jar > 3.x.x

y me enviaba a alguna parte del archivo build.xml [harness]. Además de que este problema se presentaba con cada dependencia en el módulo.

Pues resulta que la solución es muy sencilla, vamos nuestro proyecto o módulo (Ctrl+1) click derecho sobre él -> Properties -> Libreries -> Modules Dependencies y eliminamos todas las dependencias y las volvemos a agregar, damos aceptar, Clean and Build All y listo, ahora si a probar la Sticky Note Sidebar.

Otra vez un problema que se soluciona fácilmente, pero lo pongo porque me tardé un buen rato para solucionarlo.

Fuente.


Instalar JDK 7 en Debian Squeeze

Hola.

Recientemente leí en el blog de Geertjan algunas de las bondades del NetBeans 7.1 y cuando lo estaba instalando me dí cuenta que tenía funcionando el jdk 6 de sun que bruto, a qué tiempo de que lo liberaron. Y bueno, los pasos son los siguientes:

Primero descargamos los binarios del JDK 7 de la página oficial (por ejemplo Linux x64 - Compressed Binary).

después descomprimos en /usr/local:
sudo tar zxvf jdk-7-linux-x64.tar.gz -C /usr/local
agregamos los enlaces simbólicos java y javac al sistema de alternativas de Debian:
sudo update-alternatives --install /usr/bin/java java /usr/local/jdk1.7.0/bin/java 1 
sudo update-alternatives --install /usr/bin/javac javac /usr/local/jdk1.7.0/bin/javac 1 
ahora si podemos elegir con que alternativa de java y javac trabajar:
sudo update-alternatives --config java
sudo update-alternatives --config javac
veremos algo como esto:



verificamos las versiones de java y javac con:
java -version
javac -version 
ahora editamos el archivo /etc/profile para indicar al sistema la ruta a seguir para encontrar java:
# nano /etc/profile
pegamos la siguiente línea al final del archivo:
JAVA_HOME=$JAVA_HOME:/usr/local/jdk1.7.0/bin/java 
guardamos, cerramos y  probamos:
# source /etc/profile 
# echo $JAVA_HOME
:/usr/local/jdk1.7.0/bin/java
y listo.

Cambiar título de la ventana principal en NetBeans Platform

Hola.

Podría parecer una tontería eso de cambiar el título de una ventana, pero si estás comenzando a ver de que va esto de la Plataforma NetBeans te puede ser útil el siguiente tip:
// Only change the window title when all the UI components are fully loaded.
WindowManager.getDefault().invokeWhenUIReady(new Runnable() {
    @Override
    public void run() {
       WindowManager.getDefault().getMainWindow().setTitle(windowTitle);
    }
});

ese trozo de código lo puedes copiar por ejemplo en el constructurtor de tu TopComponent y listo.

Fuente.

domingo, 30 de octubre de 2011

Problema "Java heap space" en aplicación Netbeans Platform

Hola.

En estos días he estado desarrollando sobre Netbeans Platform porque hace magia  y el caso es que mientras ejecuto mi proyecto desde Netbeans IDE no existe problema alguno, entonces piensas: voy a generar mi instalador y a probar lo que llevo a ver si de verdad sirve esa opción que dice Package as -> Installers, así, ejecutas tu aplicación y se congela/traba/valequeso y no entiendes porque si todo iba tan bien. En este punto como buenos programadores que somos ¡ajá!, sícomo no recordamos las leyes de Murphy y mejor ejecutamos desde terminal para llevarnos la siguiente sorpresa:


java.lang.OutOfMemoryError: Java heap space

Googleando un poco nos enteramos que este error se produce cuando la JVM se queda sin memoria (de almacenamiento dinámico/ de intercambio) y además que por default el tamaño de la memoria es de 64MB (sobre Java 6). La forma de asignar tamaño a la memoria es con los siguientes parámetros de la JVM:
-Xms128m  // Como mínimo 128 MB
-Xmx512m  // Como máximo 512 MB
-Xmx1G    // Como máximo 1 GB

esto solo es parte de lo que necesitamos ya que el usuario no va a ejecutar la aplicación desde terminal pasándole algunos de los argumentos de arriba.
Buscando otro poco encontramos que la solución es modificar el script de creación Build Script que se encuentra en (Ctrl+1) Projects -> MiProyecto -> Important Files -> Build Script o en el directorio del proyecto MiProyecto -> build.xml, en este momento tenemos algo como esto:
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
<!-- for some information on what you could do (e.g. targets to override). -->
<!-- If you delete this file and reopen the project it will be recreated. -->
<project name="MiProyecto" basedir=".">
    <description>Builds the module suite MiProyecto.</description>
    <import file="nbproject/build-impl.xml"/>    
</project> 
y agregamos las siguientes líneas

<!-- Modifies the default settings for JVM (ANTES DEL CIERRE DE la etiqueta project)-->
<target name="build-launchers" depends="suite.build-launchers">
<replace file="build/launcher/etc/${app.name}.conf" token="--branding miproyecto -J-Xms24m -J-Xmx64m" value="--branding miproyecto -J-Xms128m -J-Xmx512m"/>
</target>
<!-- Modifies the default settings for JVM -->

obviamente deben cambiar miproyecto por el nombre de su proyecto (en minúculas), además pueden cambiar -J-Xms128m -J-Xmx512m según sus necesidades. Ahora sí, generamos instaladores, ejecutamos nuestra aplicación y problema resuelto.

También podría interesarnos asignar tamaño a la memoria cuando ejecutamos nuestra aplicación desde NetBeans IDE:

How to pass command line arguments to a NetBeans Platform application when run inside the IDE