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

    non-static variable this cannot be referenced from a static context

    Ciao!
    Ecco l'erorre che mi da:
    codice:
    Test2.java:16: non-static variable this cannot be referenced from a static context
                            Multi t1 = new Multi("Fondamentale",80,rcv);
                                       ^
    Test2.java:17: non-static variable this cannot be referenced from a static context
                            Multi t2 = new Multi("Terza",84,rcv);
                                       ^
    Test2.java:18: non-static variable this cannot be referenced from a static context
                            Multi t3 = new Multi("Quinta",87,rcv);
                                       ^
    3 errors
    Su questo codice:

    codice:
    import javax.sound.midi.*;
    
    
    public class Test2 {
    
     
    	   public static void main (String args[]){
    		System.out.println("Ciao Mondo, questo è il mio programma Java");
    		
    		try {
    			Synthesizer syn = MidiSystem.getSynthesizer();
    			if (!syn.isOpen()) syn.open();
    			Receiver rcv = syn.getReceiver();
    		
    				
    			Multi t1 = new Multi("Fondamentale",80,rcv);
    			Multi t2 = new Multi("Terza",84,rcv);
    			Multi t3 = new Multi("Quinta",87,rcv);
    		
    			t1.start();
    			t2.start();
    			t3.start();
    		
    		
    			Thread.sleep(1000);
    			rcv.close();
    			
    		} catch (Exception e) {}
    	 }
    
    
    
    	class Multi extends Thread {
    		private String name;
    		private int note;
    		private Receiver rcv;
    		
    	  public Multi(String s, int n, Receiver rcv){
    		this.name = s;
    		this.note = n;
    		this.rcv = rcv;
    	  }
    	  
    	  public void run() {
    		play(this.rcv,note);
    		System.out.println(name); 
    	  }
    
    	}
    	
    	
    	 public void play (Receiver r, int n) {
    		try {
    			int timeStamp = -1;
    			ShortMessage dn = new ShortMessage();
    			ShortMessage up = new ShortMessage();
    			dn.setMessage(ShortMessage.NOTE_ON,0,n,127);
    			up.setMessage(ShortMessage.NOTE_OFF,0,n,127);
    			r.send(dn,timeStamp);
    			Thread.sleep(1000);
    			r.send(up,timeStamp);
    		} catch(Exception e ){
    				System.out.println(e);
    		  }
    	 }
    	 
    
    
    
    }
    le linee in errore sono queste:
    codice:
    Multi t1 = new Multi("Fondamentale",80,rcv);
    Multi t2 = new Multi("Terza",84,rcv);
    Multi t3 = new Multi("Quinta",87,rcv);
    Non capisco cosa ci sia di sbagliato, ma sono alle prime armi, per cui...

    Grazie anticipatamente.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Metti static davanti alla dichiarazione della inner class (altrimenti non puoi chiamarla all'interno di un metodo statico), oppure mettila direttamente in un altro file dichiarandola pubblic, se non hai particolari esigenze per renderla una inner class.

  3. #3
    Grazie mille!!
    ho messo a posto mettendo static davanti alla classe Multi
    poi mi ha dato un errore per la chiamata a play che ho risolto mettendo static anche davanti al metodo play.


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.