Newsgroup: it.comp.java
Titolo: errore chiamata metodo

ragazzi, ho un errore nella chiamata di un metodo che non riesco a capire...
ho una classe FirmaDigitale che ha un metodo public firmaMsg.
il compilatore(jcreator) mi da il seguente errore: non-static method 
firmaMsg (java.lang.String) cannot be referenced from a static context
se avete modo di darmi un aiuto ve ne saro' eternamente grato!
vi copio qui sotto il codice!
ciao a tutti!
-----------------------------------------------------------------------------------------------
import firmadig.*;
import prog.io.*;
public class primaclasse {
 public static void main (String [] args) {
 //apro il canale di comunicazione tastiera!
 ConsoleInputManager tastiera = new ConsoleInputManager();
 //lettura dell'algoritmo
 String algoritmo = tastiera.readLine("che algoritmo desideri utilizzare? 
sha-1, md2, md5 ");
 //se l'algoritmo non e' conosciuto
 if(algoritmo.equals("sha-1") || algoritmo.equals("md2") || 
algoritmo.equals("md5")){
  //algoritmo = tastiera.readLine("che algoritmo desideri utilizzare TUMA? 
");
   //lettura
   String messaggio = tastiera.readLine("messaggio:");
   if(messaggio!=null){
    System.out.println("questo e' il tuo messaggio: "+messaggio);
    System.out.println("");
    //FirmaDigitale firma = new FirmaDigitale();
   // new FirmaDigitale.firmaMsg();
    new FirmaDigitale(algoritmo);
    FirmaDigitale.firmaMsg(messaggio);
    //FirmaDigitale.firmaMsg(Msg);
   }
   else{
    System.out.println("errore: messaggio non inserito");
    }
 }
 //allora non conosco l'algoritmo
 else{
  System.out.println("errore: algoritmo non riconosciuto");
  }
 }
}
----------------------------------------------------------------------------------------------- 


http://csvtosql.sf.net


Scherzi a parte, è possibile dichiarare il metodo firmaMsg come static 
all'interno della class FirmaDigitale:
public static void firmaMsg(String alg)
{
    // tuo codice
}
però devi fare attenzione ad utilizzare tutte variabili statiche in 
questo metodo altrimenti stai punto e a capo...
Un consiglio. Usa public static void main(String args[]) solo per far 
partire l'applicazione, perchè potresti imbatterti nel problema opposto, 
quello dell'utilizzo di variabili non statiche in un contesto statico, 
ovvero:
public static void main(String args[])
{
    new primaclasse();
}
public primaclasse()
{
    readAlgoFromKeyboard();
}
private void readAlgoFromKeyboard()
{
    //apro il canale di comunicazione tastiera!
    ConsoleInputManager tastiera = new ConsoleInputManager();
    //lettura dell'algoritmo
    String algoritmo = tastiera.readLine("che algoritmo desideri 
utilizzare? sha-1, md2, md5 ");
    //se l'algoritmo non e' conosciuto
    if(algoritmo.equals("sha-1") || algoritmo.equals("md2") || 
algoritmo.equals("md5"))
    {
        //algoritmo = tastiera.readLine("che algoritmo desideri 
utilizzare TUMA?);
        //lettura
        String messaggio = tastiera.readLine("messaggio:");
        if(messaggio!=null)
        {
            System.out.println("questo e' il tuo messaggio: "+messaggio);
            System.out.println("");
            //FirmaDigitale firma = new FirmaDigitale();
            // new FirmaDigitale.firmaMsg();
            new FirmaDigitale(algoritmo);
            /* Lo puoi usare solo se firmaMsg è stato dichiarato statico 
in FirmaDigitale.java, altrimenti usa il codice consigliato da Davide */
            FirmaDigitale.firmaMsg(messaggio);
            //FirmaDigitale.firmaMsg(Msg);
        }
        else
        {
            System.out.println("errore: messaggio non inserito");
        }
    }
    else
    {
        System.out.println("errore: algoritmo non riconosciuto");
    }
}
Spero di non aver fatto qualche strafalcione... O:-)
Buon divertimento...

 ha scritto nel messaggio 
news:dne2d5$m0q$1...@newsreader.mailgate.org...


 grazie ancora!
passi l'argomento sbagliato alla funzione, vorrebbe l'oggetto
firmadig.Firmadigitale ma tu gli passi una stringa.
cmq ti consiglio un manualetto per iniziare ;)


 cmq ti consiglio un manualetto per iniziare ;)
lo so...scusa, ma in questo momento non ho molto tempo...devo consegnare 
questo progettino x l'universita' entro lunedi sera a mezzanotte.
tenendo conto che sono uno studente lavoratore non sai quanto mi stia sulle 
p...lle dover stare in casa a smanettare col pc proprio durante le 
vacanze!(non so dove tu stia, ma a milano c'e' il ponte dell'immacolata!)
nel frattempo cerco su internet, ma + di tanto la cosa non mi aiuta, e' 
difficile trovare qulcosa che faccia al tuo caso...soprattutto quando ne sai 
poco! 

 sai poco!
e certo che lo so, sono a casa da martedi ;)



anch'io, a sbattermi su sto progettino! non ce la faccio +! 

posso farti l'ultima domanda...questa e' abbastanza banale...
devo far sceglere all'utente cosa desidera fare>>risposta multipla da 
tastiera, solo che quando imposto un ciclo if in base alla scelta 
dell'utente il programma non entra nel ciclo...il fatto e' che non mi da 
alcun genere di errore!
come al solito ti copio qui sotto il codice...grazie 1000!
 //chiedo cosa vuole fare l'utente
 System.out.println("rifiuto del servizio: digita 1");
 System.out.println("infrazione della disponibilita': digita 2");
 System.out.println("infrazione dell'integrita': digita 3");
 System.out.print("scegli cosa vuoi fare:");
 String scelta = tastiera.readLine();
  if(scelta=="1"){
   System.out.println("scelta "+scelta);
  }
  if(scelta=="2"){
   System.out.println("scelta "+scelta);
  }
  if(scelta=="3"){
   System.out.println("scelta "+scelta);
  } 

   } 
Giusto, per la comparazione di due stringhe devi utilizzare il metodo .equals() 
e non ==!
in questo caso scelta.equals("1")
Poi per scelte del genere ti conviene utilizzare una switch che utilizza come 
paramentro base un CHAR o un numero (quindi in questo caso l'operatore == è 
lecito) o altrimenti utilizzi un costrutto:
if(){
}
else if(){
}
else{
}
cioè includedo sempre un valore di default...altrimenti se la condizione non 
dovrebbe essere mai verificata il programma salta direttamente alle istruzioni 
dopo il blocco if-if-if!
Ciao,
jRed

 ha scritto nel messaggio 
news:439b3dae$0$27611$4faf...@reader1.news.tin.it...


approfitto l'ultima volta della vostra competenza e bonta' d'animo...
mi da un'altro errore nella seconda delle due righe qui sotto...sempre per 
la chiamata di un metodo per semplicita' vi ho incollato tutta la pagina di 
codice(non e' molto)e ho segnalato bene dove queste due righe si trovino 
all'interno della pagina!
come al solito ringrazio in anticipo! :)
 FirmaDigitale firmato = new FirmaDigitale(algoritmo);
   firmato.firmaMsg(messaggio);
//////////////////////////////////INIZIO///////////////////////////////////
import firmadig.*;
import prog.io.*;
public class mittente {
 public static void main (String [] args) {
 //apro il canale di comunicazione tastiera!
 ConsoleInputManager tastiera = new ConsoleInputManager();
 //lettura dell'algoritmo
 String algoritmo = tastiera.readLine("che algoritmo desideri utilizzare? 
sha-1, md2, md5 ");
 //se l'algoritmo non e' conosciuto
 if(algoritmo.equals("sha-1") || algoritmo.equals("md2") || 
algoritmo.equals("md5")){
   //lettura messaggio
   String messaggio = tastiera.readLine("messaggio:");
   if(messaggio!=null){
    System.out.println("questo e' il tuo messaggio: "+messaggio);
    System.out.println("");
    FirmaDigitale firmato = new FirmaDigitale(algoritmo);
   firmato.firmaMsg(messaggio); 
ERRORE//////////////////////////////////////////ERRORE/////////////////////////////////////
    CanaleComunicazione invio = new CanaleComunicazione();
    invio.scriviMsg(firmato);
    System.out.println("il messaggio e' stato inviato con successo");


    firmato.firmaMsg(messaggio);
Da come hai descritto lo hai descritto tu, errore sembra provenire dal metodo 
firmaMsg(). Ricontrolla bene l'implementazione, e vedi se richiede solo una 
stringa come parametro oppure vuole altre cose! ;)
Un cosiglio, posta l'eccezione che ti viene fuori! :)
Ciao,
jRed

 firmadig.Firmadigitale ma tu gli passi una stringa.
Credo sia il contrario: vorrebbe una String ma gli passi un 
firmadig.Firmadigitale!
Bisognerebbe vedere se "firmato" ha un metodo che permette di ricavarlo 
in formato stringa, in alternativa provare con toString()?
Saluti
CarMas