Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    JAVA Applet e javacomm

    Ciao sto scrivendo un applet che dovrebbe leggere dei dati dalla porta seriale utlizzando il package javacomm, ho provato prima a scrivere un semplice programma che mi visualizzasse le porte disponibili , il punto è questo, che se lancio la classe come applicazione funziona , se invece la lancio come applet non funziona,
    la classe è questa :

    codice:
    import javax.comm.*;
    import java.io.*;
    import java.util.*;
    
    public class SerClass implements SerialPortEventListener{
    	InputStream in ;
    	public static void main(String[] args){
    		Enumeration enport = CommPortIdentifier.getPortIdentifiers();
    		CommPortIdentifier idPorta = null;
    		if(!enport.hasMoreElements()){
    			System.out.println("Nessuna porta seriale trovata !");
    		}
    		while(enport.hasMoreElements()){
    			CommPortIdentifier pid = (CommPortIdentifier)enport.nextElement();
    			System.out.println("Trovata porta : " + pid.getPortType() + " Nome : " + pid.getName());					
    		}
    	}
    	public void serialEvent(SerialPortEvent event) { 
             switch(event.getEventType()) {
    	 case SerialPortEvent.BI:
    	 case SerialPortEvent.OE:
    	 case SerialPortEvent.FE:
    	 case SerialPortEvent.PE:
    	 case SerialPortEvent.CD:
    	 case SerialPortEvent.CTS:
    	 case SerialPortEvent.DSR:
    	 case SerialPortEvent.RI:
    	 case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
    	 break;
    	 case SerialPortEvent.DATA_AVAILABLE:
    	  byte[] readBuffer = new byte[20];
    	  try {
    	    while (in.available() > 0){
    	      int numBytes = in.read(readBuffer);
    	   } 
    	   //System.out.print(new String(readBuffer));
    	  }
    	  catch (IOException e) {}
    	  break;
    	 }
    	}	
    }
    Per visualizzarla sto scrivendo on eclipse , che "dovebbe" impostare i premessi in automatico ,
    il codice dell'applet è questo :

    codice:
    import java.applet.Applet;
    import java.io.*;
    import java.awt.*;
    import javax.comm.*;
    import java.util.*;
    import javax.swing.*;
    
    
    public class MyApplet extends Applet implements SerialPortEventListener {
    	private InputStream in;
    	private String logPorte ;
    
    	public void leggiPorte(){
    		Enumeration enport = CommPortIdentifier.getPortIdentifiers();
    		CommPortIdentifier idPorta = null;
    		if(!enport.hasMoreElements()){
    			logPorte = "Nessuna porta seriale trovata !";
    		}
    		while(enport.hasMoreElements()){
    			CommPortIdentifier pid = (CommPortIdentifier)enport.nextElement();
    			logPorte += "Trovata porta : " + pid.getPortType() + " Nome : " + pid.getName();					
    		}
    	}
    	
    	public void paint(Graphics g)
    	  {
    	    g.setColor(Color.blue);
    	    g.drawString("Applet WriteToDiskApplet", 120, 120);
    	    g.setColor(Color.RED);  
    	    g.drawString(logPorte, 100, 100);
    	  }
    	public void init(){
    		leggiPorte();
    	}
    
    	public void serialEvent(SerialPortEvent event) {
    		switch(event.getEventType()){
    			case SerialPortEvent.BI :
    			case SerialPortEvent.OE :
    			case SerialPortEvent.FE :
    			case SerialPortEvent.PE :
    			case SerialPortEvent.CD :
    			case SerialPortEvent.CTS :
    			case SerialPortEvent.DSR :
    			case SerialPortEvent.RI :
    			case SerialPortEvent.OUTPUT_BUFFER_EMPTY :
    			break ;
    			case SerialPortEvent.DATA_AVAILABLE :
    				byte[] readBuffer = new byte[20];
    				try{
    					while(in.available() > 0){
    						int numBytes = in.read(readBuffer);
    					}
    					//System.out.println(new String(readBuffer));
    				}
    				catch(IOException e){
    					e.printStackTrace();
    				}
    				break;
    		}		
    	}
    }
    La classe viene compilata come applet ma eclipse da questi errori al runtime

    java.lang.NullPointerException: name can't be null
    at java.io.FilePermission.init(Unknown Source)
    at java.io.FilePermission.<init>(Unknown Source)
    at java.lang.SecurityManager.checkDelete(Unknown Source)
    at javax.comm.CommPortIdentifier.getPortIdentifiers(C ommPortIdentifier.java:70)
    at MyApplet.leggiPorte(MyApplet.java:39)
    at MyApplet.init(MyApplet.java:58)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

    C'è qualcosa legata ai permessi che devo controllare ?

    Spero qualcuno possa aiutarmi ...
    ciao a tutti
    Leonardo -

    Se vuoi vedere il sito ufficiale del paese di Barrali vai su www.barrali.net
    Guarda il video di Satch Boogie

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,011
    E' sempre la solita storia: le applet non possono accedere a niente che non sia sotto il loro livello di accesso... ossia, nella cartella sul server dove sono contenute e nelle eventuali sottocartelle, lì possono mettere le mani, da altre parti no.
    Si risolve firmando l'applet, ossia dotandola di un certificato digitale (che l'utente deve approvare) che potenzialmente le permetta di accedere a risorse diverse da quelle citate più sopra, inclusi HD, porte seriali e quant'altro. Cerca sul forum e sul sito della sun.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Ok ho creato il certificato seguendo la guida di questo sito , però a quanto pare il problema on era quello... o forse non era solo quello ...
    Eseguendo col browser l'applet mi da l'errore "impossibile inizializzare l'applet" ...
    Il codice è sempre lo stesso ...

    :master:

    cosa non va?
    Leonardo -

    Se vuoi vedere il sito ufficiale del paese di Barrali vai su www.barrali.net
    Guarda il video di Satch Boogie

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,011
    un po' pochette come informazioni... oltre al messaggio di errore, che cosa ti dice la console di java?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    L' errore che mi viene restituito se guardo la console java è questo ...


    java.lang.NoClassDefFoundError: javax/comm/SerialPortEventListener
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknow n Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at sun.applet.AppletClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.applet.AppletClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.applet.AppletClassLoader.loadCode(Unknown Source)
    at sun.applet.AppletPanel.createApplet(Unknown Source)
    at sun.plugin.AppletViewer.createApplet(Unknown Source)
    at sun.applet.AppletPanel.runLoader(Unknown Source)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

    Sembrerebbe nn trovi alcune classi , ma ho sistemato tutte i file al loro posto , ho inserito in jdk1.5 / bin / il file win32.dll , tra l'altro l'ho inserito anche nel bin del JRE , e nel cartella lib ho inserito il file javax.comm.properties ... ma da quest'errore...

    Tra l'altro aprendo la console da firefox l'errore è un po diverso ...

    java.lang.ExceptionInInitializerError
    at MyApplet.leggiPorte(MyApplet.java:39)
    at MyApplet.init(MyApplet.java:58)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission javax.comm.properties read)
    at java.security.AccessControlContext.checkPermission (Unknown Source)
    at java.security.AccessController.checkPermission(Unk nown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPropertyAccess(Unkn own Source)
    at java.lang.System.getProperty(Unknown Source)
    at javax.comm.CommPortIdentifier.<clinit>(CommPortIde ntifier.java:678)
    ... 4 more
    java.lang.NoClassDefFoundError
    at MyApplet.leggiPorte(MyApplet.java:39)
    at MyApplet.init(MyApplet.java:58)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    java.lang.NoClassDefFoundError
    at MyApplet.leggiPorte(MyApplet.java:39)
    at MyApplet.init(MyApplet.java:58)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)


    :master:
    Leonardo -

    Se vuoi vedere il sito ufficiale del paese di Barrali vai su www.barrali.net
    Guarda il video di Satch Boogie

  6. #6
    Ho trovato l'errore ... e lo pubblico ...se mai dovesse servire ....
    E' stato sufficiente mettere nel metodo Init() dell'applet la riga System.setSecurityManager(null);
    ed è tutto a posto...



    Leonardo -

    Se vuoi vedere il sito ufficiale del paese di Barrali vai su www.barrali.net
    Guarda il video di Satch Boogie

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,011
    Ecco, questo è uno dei post che dovrebbe restare in primo piano.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,162

    Moderazione

    Modifico il titolo e lo aggiungo alle pillole.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,011
    grazie Lele!
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    RAGAZZI....

    la mia domanda è molto semplice...
    sempre riguardo alla generazione di eventi sulla port aseriale qualcuino di voi mi sa spiegare perche opvunque vado, l'unico evento che viene gestito è semrpe e comunque DATA_AVAILABLE... e gli altri vengono sempre trascurati?
    sapete dirmi se per caso uno di questi eventi è in qualche modo riconducibile ad eventi quali un mal funzionamento del modem, che magari è caduto op si èp disconnesso...
    in tal caso sarei in grado di lanciare un metodino che procede alla specifica dei comandi AT per il riavvio del suddetto modem....

    PLEASE HELP ME
    Volsi cola dove si puote ciò che si vuole e più non dimandare

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.