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

    non-static method cannot be referenced from a static context

    Ciao a tutti,
    io questi linguaggi ad oggetto non riesco a inquadrarli. Passiamo al codice:

    codice:
     import java.io.*;
    public class xmlGenerator{
    	// variabili
    	public String jobPrecedente="";
    	public int copie=0;
    	public int errori=0;
    	public String StartTime = "";
      	public String EndTime = "";
      	
      	public xmlGenerator (String job,int cop,int errori, String start, String fine){
    	....
      	}  	
      	public xmlGenerator (){
    		jobPrecedente="";
    		copie=0;
    		errori=0;
    		StartTime ="";
    		EndTime ="";
      	}
      	// metodi SET
      	public void setCopie (){ copie++; }
      	public void setErrori (){........}
      	public void setJobPrecedente (String job){ jobPrecedente = job; }
      	public void setStartTime(String start){StartTime = start;}
      	public void setEndTime (String fine){EndTime = fine;}
      	public void resetCopieErrori(){	copie = 0;	errori = 0; 	}
    	// Metodi GET
    	public String getJobPrecedente(){return jobPrecedente; }
    	public String getStartTime(){return StartTime;}
    	public String getEndTime(){return EndTime;}
    	public int getCopie(){return copie;}
    	public int getErrori(){	return errori;}
       
       public static void main (String args[]) {
       	xmlGenerator q = new xmlGenerator();
    	try{
    		...	    
    		// FILE XML SU CUI ANDREMO A SCRIVERE SOLO LE INFO NECESSARIE:
    		File f3=new File("Statistics\\output.xml");
    	    	FileOutputStream fos3=new FileOutputStream(f3);
    	    	PrintStream ps3=new PrintStream(fos3);
    	    
    		// FILE TXT DA CUI LEGGIAMO LE INFORMAZIONI:
    		File f1=new File("Statistics\\input.txt");
    		FileInputStream fis=new FileInputStream(f1);
    		InputStreamReader isr=new InputStreamReader(fis);
    		BufferedReader br=new BufferedReader (isr);
    		String linea=br.readLine();
    		linea=br.readLine();		
    		
    		String [] intestazione  			= new String [26];
    		initMatrice(intestazione);
    		....
    		scriviHeader(ps3);
    		
    		// Iterazione x leggere intero file
    		while (linea != null) {
    		....
    			// Iterazione x leggere intera riga
    			for(int i=0;i<linea.length();i++){
    			....
    			} // chiude ciclo FOR
    		scriviXmlJobUnici(q,intestazione,ps3); 
    		//error: non-static method scriviXmlJobUnici(xmlGenerator,String[],PrintStream) cannot be referenced from a static context 
    		....		
    		} // chiude ciclo WHILE
    	....
    	scriviFooter(ps3);
    	ps3.close();
    	ps.close();
    	....
      	}catch (IOException e){
      		System.out.println("Errore: " +e);
      		System.exit(1);  	
      	}
      }
    
    ......	  	
    
    	// Metodo x scrivere il file xml con i dati
    	static void scriviChildXmlDati (PrintStream ps, int conta, String intestazione){.......... }
      
      
      //	Metodo per scrivere un file xml con i Job unici, le copie di ognuno e gli errori di stampa
    public void scriviXmlJobUnici(xmlGenerator qq, String [] intestazione, PrintStream ps3)  {
    
      	if (getJobPrecedente() == ""){ // con jobPrecendente = "" siamo alla prima iterazione delle prima riga
      		qq.setJobPrecedente(intestazione[0].substring(0,(intestazione[0].length()-11)));
      		qq.setStartTime(intestazione[19]);
      		qq.setEndTime(intestazione[20]);
      		// PrintDone = 0
      		if (intestazione[5]=="0"){ qq.setErrori();}
      		else { qq.setCopie();}
      		scriviFileJobUnici(ps3,qq);
      	}
      	else{
      		if (qq.getJobPrecedente() == intestazione[0].substring(0,(intestazione[0].length()-11))){
      			qq.setEndTime(intestazione[20]);
      			if (intestazione[5]=="0") qq.setErrori();
      			else qq.setCopie();
      		}
      		else{
      			scriviFileJobUnici(ps3,qq);
      			qq.resetCopieErrori();
      			qq.setJobPrecedente(intestazione[0].substring(0,(intestazione[0].length()-11)));
      			qq.setStartTime(intestazione[19]);
      			qq.setEndTime(intestazione[20]);
      			// PrintDone = 0
      			if (intestazione[5]=="0"){ qq.setErrori();}
      			else { qq.setCopie();}
      		}
      	}
      }
      
      void scriviFileJobUnici(PrintStream ps3,xmlGenerator qqq){
      	ps3.println ("\t\t<job 			id=\"0\">" + qqq.getJobPrecedente()		+ "</job>");
      	ps3.println ("\t\t<copie 		id=\"1\">" + qqq.getCopie()					+ "</copie>");
      	ps3.println ("\t\t<errori 		id=\"2\">" + qqq.getErrori() 				+ "</errori>");
      	ps3.println ("\t\t<inizio 		id=\"3\">" + qqq.getStartTime()				+ "</inizio>");
      	ps3.println ("\t\t<fine 		id=\"4\">" + qqq.getEndTime()				+ "</fine>");
      }
    }
    Ho evidenziato in verde l'errore e in rosso il punto nel file che da problemi e la posizione a cui fa riferimento.
    Beh il bello è che non riesco a capire come potrei accedere a quelle variabili subito all'inizio della classe. Ho dovuto ridurre il codice sostituendolo con ......
    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non sto nemmeno a leggere tutto il codice.
    Dico solo che sei nel main, quindi dentro ad un metodo statico:

    codice:
    public static void main(String[] args) { ... }
    Da un metodo statico (quindi, da un contesto statico) non puoi (per ovvie ragioni che ti dovrai studiare) usare metodi e/o campi che non siano dichiarati "static", senza invocarli su istanze dell'oggetto.... ed è quello che stai cercando di fare.


    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

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 © 2025 vBulletin Solutions, Inc. All rights reserved.