Showing posts with label Java. Show all posts
Showing posts with label Java. Show all posts

Monday, February 6, 2012

Kill a Windows process with Java


I would like to kill a process in Java for an application in Java 1.4. ; I don't want to (can't) add some custom libraries so I will use 'Runtime' class to execute a DOS command:
tasklist: allow me to recover all processes running.
taskkill: allow me to destroy a process by its ID.

This is a Java class which will use these both commands to do the job:

KillProcess.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;


public class KillProcess {
      public static final int FIRST_COLUMN_LENGTH = 26;
      
      /**
      * pass all statements which must be found in the process description
      *     process definition columns are:
      *            - Image Name
      *            - PID
      *            - Session Name
      *            - Session#
      *            - Mem Usage
      *            - Status
      *            - User Name
      *            - CPU Time
      *            - Window Title
      * @param args {String[]}: statements which must be found in the process description
      * @throws IOException
      */
      public static void kill(String[] args) throws IOException{
            int processId = 0;
            // recover a file output from the DOS command 'tasklist'
            // which list all running processes
            Process process = Runtime.getRuntime().exec("tasklist /v");
            InputStream inputstream = process.getInputStream();
            InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
            BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
            String line;
            while ((line = bufferedreader.readLine()) != null) {
                  boolean blnFound = true;
                  // loop on all statements to verify if the line contains it
                  for (int i=0;ilength;i++){
                        if (line.indexOf(args[i])<0){
                              blnFound = false;
                        }
                  }
                  if (blnFound){
                        line = line.substring(FIRST_COLUMN_LENGTH);
                        while(line.charAt(0)==' '){
                              line=line.substring(1);
                        }
                        String strProcessId = line.substring(0, line.indexOf(' '));
                        processId = Integer.parseInt(strProcessId);
                  }
            }
            // verify the process has been found
            if (processId!=0){
                  // kill the process via 'taskkill'
                  Runtime.getRuntime().exec("taskkill /pid " + processId + " /f");
                  System.out.println("The process "+processId+" has been killed!");
            } else{
                  System.out.println("Process not found!");
            }
      }
      public static void main(String[] args) throws IOException{
            kill(args);
      }
}

This is an example of class use which will kill my IrfanView process ...

java KillProcess i_view32.exe IrfanView

Sunday, July 31, 2011

Optimiser Eclipse

1. Paramètre de lancement :

Changer la cible (target) dans le lien pour lancer Eclipse comme suit :

%path_to_eclipse%\eclipse.exe -vm %path_to_jdk%\jre\bin\client\jvm.dll

Avantages :
  • l'écran de lancement vient plus rapidement.
  • Le processus est affiché comme 'eclipse.exe' et non plus en tant que 'java.exe'.
  • Pare-feu (Firewalls): Eclipse accède à Internet au lieu de Java.
  • Meilleure gestion sous Windows & Mac.
2. Modifier le fichier '%path_to_eclipse%\eclipse.ini' comme suit :

-showlocation
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256M
-framework
plugins\org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
-vm
jdk1.6.0_10\jre\bin\client\jvm.dll
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms128m
-Xmx384m
-Xss2m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:MaxGCPauseMillis=10
-XX:MaxHeapFreeRatio=70
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-XX:CompileThreshold=5
-Dcom.sun.management.jmxremote

3. Vous pouvez également utiliser la console Java en lançant l'exécutable suivant :

%path_to_jdk%\bin\jconsole.exe

Monday, July 4, 2011

Error message trying to launch eclipse after update java to version 1.6.0_23

I received this error message trying to launch eclipse after update java to version 1.6.0_23.

!ENTRY org.eclipse.osgi 4 0 2011-07-04 15:40:00.560
!MESSAGE Startup error
!STACK 1
java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jre6\bin\nio.dll: The specified procedure could not be found
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
...
at org.eclipse.equinox.launcher.Main.run(Main.java:1407)


The only way to solve this problem was to reinstall my JRE environment.

Transform a date in format yyyy-mm-ddThh:mm:ss

During some testing of 'Ext Calendar Pro' application, I received a date in format 'yyyy-mm-ddThh:mm:ss' from a JSon request. I use SimpleDateFormat class to modify the date with the following pattern :

private static final String CALENDAR_DATE_PATTERN =
"yyyy-MM-dd'T'hh:mm:ss";

This is an example of how I used this pattern to convert my date to a Calendar Java object:

Calendar calendar = Calendar.getInstance(); 
SimpleDateFormat
df =
new SimpleDateFormat(CALENDAR_DATE_PATTERN);
try
{
calendar.setTime(df.parse(value));
}
catch(ParseException pe){
throw new IllegalStateException(pe);
}

Sunday, October 5, 2008

le 'Garbage Collector'

Qu'est ce que le 'Garbage Collector' ?
Un ramasse-miettes, ou récupérateur de mémoire, ou glaneur de cellules (en anglais garbage collector, abrégé en GC) est un sous-système informatique de gestion automatique de la mémoire. Il est responsable du recyclage de la mémoire préalablement allouée puis inutilisée.

Les 2 méthodes pour demander au 'Garbage collector' de faire du nettoyage:
System.gc();
Runtime.getRuntime().gc();
Mais on ne peut jamais sûr qu'il va nettoyer de suite!

Sunday, September 28, 2008

'Regular' and static Inner class

Voici un exemple d'une 'regular inner class' (classe interne régulière):


  • la classe interne 'Inner' peut accéder aux éléments de la classe externe (même les 'private')
  • la classe interne ne peut avoir d'élément 'static'.
  • la classe interne peut accéder à l'instance de la classe externe: 'NomDeLaClasseExterne.this' (dans l'exemple: Outer.this.a)
  • pour créer une instance de la classe Inner à partir d'une autre classe externe ('A' dans l'exemple) ou d'une méthode static de la classe externe ('Outer' dans l'exemple), vous devez avoir une référence sur la class externe ('Outer' dans l'exemple): "Outer.Inner inner = new Outer().new Inner();".
Tandis qu'une 'static inner class' (classe interne statique):


  • peut avoir des membres statiques
  • ne peut pas accéder aux membres 'instance' de la class externe
  • pour créer une instance de la classe, on n'a plus besoin d'une référence de la classe externe; on peut directement faire ceci: "Outer.Inner inner = new Outer.Inner();".

Thursday, September 11, 2008

Utilisez la classe DateFormat

Voici un exemple de l'utilisation de la classe DateFormat et les différentes façons de créer une instance; suivit de la méthode 'parse' de cette même classe pour transformer un String en date.



Notez que la boucle 'for' utilise la syntaxe pour Java 5.

Ajouter du temps à une date avec la class Date & Calendar

Voici le code qui permet d'ajouter du temps à une date. N'oubliez pas qu'en utilisant "Date d = new Date();", vous obtenez automatiquement la date du moment.


Sunday, August 17, 2008

SCJP: astuce avec les Wrappers

Que va afficher à la console le code suivant ?

class
A{

public static void main(String[] args){

Integer i1 = 127;

Integer i2 = 127;

if(i1 == i2) System.out.println("i1 == i2");

if(i1 != i2) System.out.println("i1 != i2");

Integer i3 = 128;

Integer i4 = 128;

if(i3 == i4) System.out.println("i3 == i4");

if(i3 != i4) System.out.println("i3 != i4");

}

}


Réponse:
i1 == i2
i3 != i4
Si la valeur est plus petite ou égale à 127 ( 27-1 = le nombre maximum de valeur positive pour une primitive de type byte), la VM (Virtual Machine) va automatiquement utiliser l'unboxing pour tester l'équation. A partir de 128, ce n'est plus le cas!

Friday, August 8, 2008

Emplois et placement des modificateurs en Java

Voilà je viens de faire un petit shéma récapitulatif des modificateurs d'accès et de non-accès et les possibilités de leur emplois/placement en Java.


Monday, August 6, 2007

Compiler et exécuter son premier programme Java

1. Télécharger et installer le JDK (Java Development Kit) chez Sun.
2. Après l'installation, vérifier que les valeurs pour les variables suivantes existent bien :
- PATH = "C:\java\j2sdk1.4.2_06\bin;" (permet de lancer les commandes java peut importe le répertoire dans lequel on se trouve).
- CLASSPATH = ".;C:\java\j2sdk1.4.2_06\bin;"
* Dans le cas contraire vous risquez d'avoir un message d'erreur de ce genre "java lang NoClassDefFoundError" ; lorsque vous allez essayez de compiler/lancer votre premier programme.
* Pour vérifier/modifier ces variables cliquez droit sur "My computer" > "Properties" > "Advanced" > "Environment Variables" > "System variables"
3. Création du fichier HelloWorld.java

    /**
    * The HelloWorld class is an application that
    * displays "Hello World!" to the standard output.
    */

    public class HelloWorld {
    // Display "Hello World!"
    public static void main(String args[]) {
    System.out.println("Hello World!");
    }
    }


* Il ne peut y avoir qu'une seule classe public dans un fichier java; le nom du fichier doit être le même que la classe public (case sensitiv) complété de l'extension java (dans notre cas: "HelloWorld.java"). Dans les rares cas ou il n'y a pas de classe public, le fichier peut s'appeler comme on veut.
4. Compilation et Exécution
- compilation: javac nomdemaclasse.java (va générer un ou plusieurs fichiers ".class")
- exécution: java nomdemaclasse
5. Dans le cas ou vous avez ce message d'erreur : Exception in thread main classpath "java lang NoClassDefFoundError" : vérifier bien vos variables d'environement PATH et CLASSPATH (cfr 2).

Friday, July 13, 2007

Les 4 principes de la programmation orientée objet

L'encapsulation:
On cache la structure de l'objet et on propose plutot des méhodes pour manipuler les propriétés de cet objet ; de cette manière on peut s'assurer de la manière dont seront traitées ces propriétés. On utilise les spécificateurs d'accès (public, protected, private) pour cacher l'implémetation.

L'aggrégat ou la composition (Aggregation):
C'est le fait de pouvoir stocker un objet à l'intérieur d'un autre objet.

L'héritage (Inheritance):
C'est la possibilité pour un classe étendu/enfant d'utilisée des méthodes de sa classe parent.

Polymorphisme:
C'est la possibilité d'utiliser le même code avec différents types. Par exemple, on crée un méthode qui prend un objet "FormeGeometrique" en paramètre, et on pourra l'utiliser avec des objets tels que "Triangle", "Rectangle", ... à condition que ceux-ci étendent la classe "FormeGeometrique"

Saturday, March 17, 2007

Envois d'email en Java

Sun fourni une API JavaMail pour l'envois d'email en Java. Cette API est disponible à l'adresse suivante:
http://java.sun.com/products/javamail/index.html
Vous aurez besoin également d'une class d'activation pour que l'envois fonctionne ; JavaBeans Activation Framework:
http://java.sun.com/products/javabeans/glasgow/jaf.html

Un code source exemple est disponible ici :
http://www.micro-mind.net/files/testMail.java

Upload de fichier dans un formulaire (en Java)

Apache fourni une API Java pour l'upload de fichier dans un formulaire WEB.
Elle est disponible à cette adresse :
http://jakarta.apache.org/commons/fileupload/

Voici un exemple de class Java qui utilise cet API:
http://www.micro-mind.net/files/uploadExample.java
import java.io.File;
import java.util.Iterator;
import java.util.List;
 
import javax.servlet.http.HttpServletRequest;
 
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
 
public class FileUpload {
      public static boolean upload(HttpServletRequest request){
   boolean result = false;
            try {
                  // Check that we have a file upload request
                  //boolean isMultipart = ServletFileUpload.isMultipartContent(request);
                  //System.out.println(isMultipart);
                  // Create a factory for disk-based file items
                  FileItemFactory factory = new DiskFileItemFactory();
                  // Create a new file upload handler
                  ServletFileUpload upload = new ServletFileUpload(factory);
                  // Parse the request
                  List items = upload.parseRequest(request);     // List  FileItem
                  Iterator iterator = items.iterator();
                  while (iterator.hasNext()) {
                        FileItem item = (FileItem) iterator.next();
                      if (item.isFormField()) {
                          processFormField(item);
                      } else {
                          processUploadedFile(item);
                      }
                      //item.write(uploadedFile);
       result = true;
                  }          
            }catch (FileUploadException fue) {
                  fue.printStackTrace();
            }catch (Throwable e) {
                  e.printStackTrace();
            }
            return result;
      }
     
      private static void processUploadedFile(FileItem item) {
            if (!item.isFormField()) {
                String fieldName = item.getFieldName();
                String fileName = item.getName();
                String contentType = item.getContentType();
                boolean isInMemory = item.isInMemory();
                long sizeInBytes = item.getSize();
                System.out.println("FILENAME\rfieldName="+fieldName+"\rfileName="+fileName+"\rcontentType"+contentType+
                        "\risInMemory="+isInMemory+"\rsizeInBytes="+sizeInBytes);
                try{
                      File uploadedFile = new File("D:/"+fileName);
                      item.write(uploadedFile);
                }catch (Exception e) {
                        e.printStackTrace();
                  }
            }
      }
 
      private static void processFormField(FileItem item) {
            if (item.isFormField()) {
                String name = item.getFieldName();
                String value = item.getString();
                System.out.println("FORMFIELD\rname="+name+"\rvalue="+value);
            }
      }
}

Sunday, February 18, 2007

Supprimer les espaces dans le code source des pages JSP

Pour réaliser des applications, j'ai choisi la configuration suivante du côté client: j'ai donc une Servlet qui envois mes données à mes pages JSP (Beans). Dans ces pages JSP j'utilise des tags JSTL.
Un inconvénient avec ces tags, c'est qu'à chaque appel, il crée un retour à la ligne dans le code html de sortie.

Cela pose certains problèmes pour la lecture du code source (post affichage) et augmente le volume de transfert des pages HTML aux client.

Une solution pour supprimer ces espaces du côté client est de rajouter un paramètre dans le context web.xml de votre application:
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>

Ceci règlera le problème du volume des pages html. Cependant si les espaces ont été supprimés votre code sources ne possèdera pas les indentations de votre code JSP. Un autre problème est que si vous n'utilsez pas '&nbps;' pour écrire un espace, il serra supprimer.