Trasformare un programma in una classe

di il
11 risposte

Trasformare un programma in una classe

Ciao a Tutti,
Probabilmente il problema sembrerà banale, ma avrei bisogno di una mano per risolverlo.
In termini generali ho un programma, cioè una classe con metodo main, che ho bisogno di trasformare in una pura e semplice classe dalla quale ottenere istanze.
Ho provato a rimuovere semplicemente il metodo estraendo il resto del codice che era incorporato tra le parentesi graffe, ma l'IDE Netbeans mi sottolinea in rosso tutti i metodi e le proprietà che prima andavano bene, dichiarandoli inadeguati.
Sono stato abbastanza chiaro o sarebbe meglio che vi postassi il codice sorgente?

11 Risposte

  • Re: Trasformare un programma in una classe

    fulviot66 ha scritto:


    In termini generali ho un programma, cioè una classe con metodo main, che ho bisogno di trasformare in una pura e semplice classe dalla quale ottenere istanze.
    Ma che vuol dire??
  • Re: Trasformare un programma in una classe

    Forse è meglio se posto il codice con il commento del metodo main e delle relative parentesi graffe:

    package com.fulviotarable;

    import java.io.IOException;
    import java.net.URL;
    import javax.sound.sampled.AudioInputStream;
    import javax.sound.sampled.AudioSystem;
    import javax.sound.sampled.Clip;
    import javax.sound.sampled.DataLine;
    import javax.sound.sampled.LineUnavailableException;
    import javax.sound.sampled.Mixer;
    import javax.sound.sampled.UnsupportedAudioFileException;

    /**
    *
    * @author Fulvio
    */
    public class Suoneria
    {
    // Definisce le variabili usate dal sistema audio

    public static Mixer mixer;
    public static Clip clip;

    // public static void main(String[] args)
    // {
    Mixer.Info[] mixInfos = AudioSystem.getMixerInfo();

    // Ottiene un elenco dei dispositivi audio presenti nel sistema
    /*
    for(Mixer.Info info : mixInfos)
    {
    System.out.println(info.getName() + "---" + info.getDescription());
    }
    */
    // Seleziona il dispositivo di riproduzione audio di default

    mixer = AudioSystem.getMixer(mixInfos[0]);

    DataLine.Info dataInfo = new DataLine.Info(Clip.class, null);
    try { clip = (Clip)mixer.getLine(dataInfo); }
    catch (LineUnavailableException lue){ lue.printStackTrace(); }

    // Carica il file audio da riprodurre

    try
    {
    URL soundURL = Suoneria.class.getResource("alarm.wav");
    AudioInputStream audioStream = AudioSystem.getAudioInputStream(soundURL);
    clip.open(audioStream);
    }

    // Intercetta eventuali errori di gestione della riproduzione

    catch (NullPointerException npe){ npe.printStackTrace();}

    catch (LineUnavailableException lue){ lue.printStackTrace();}
    catch (UnsupportedAudioFileException uafe) { uafe.printStackTrace();}
    catch (IOException ioe) { ioe.printStackTrace();}

    // Avvia la riproduzione del file audio caricato

    clip.start();

    do
    {
    try { Thread.sleep(50); }
    catch (InterruptedException ie) {ie.printStackTrace(); }
    } while (clip.isActive());
    // }
    }
  • Re: Trasformare un programma in una classe

    E da questa classe cos'è che vorresti ottenere?
    Non ti basta avviarla attraverso il main?
  • Re: Trasformare un programma in una classe

    fulviot66 ha scritto:


    Forse è meglio se posto il codice con il commento del metodo main e delle relative parentesi graffe:
    Così come l'hai scritta (senza il main) ovviamente NON compila: istruzioni, try-catch, do-while ecc. NON possono stare da soli fuori da un metodo.

    Quindi cosa vuoi fare? Poter istanziare Suoneria?

    Suoneria suoneria = new Suoneria();

    E poi?

    suoneria.??????()

    COSA vuoi poter fare su un oggetto Suoneria??
  • Re: Trasformare un programma in una classe

    Ragnar ha scritto:


    E da questa classe cos'è che vorresti ottenere?
    Non ti basta avviarla attraverso il main?


    Ciao Ragnar, grazie per l'interessamento.
    Infatti attraverso il main, funziona, ma io nel file di progetto ho già disponibile un'interfaccia grafica che dispone del suo metodo main, quindi ho bisogno di capire cosa occorre per farla sopravvivere fuori dal metodo main. Forse manca un costruttore?
  • Re: Trasformare un programma in una classe

    Esatto andbin,
    l'idea è proprio quella di poter istanziare un oggetto definito come Suoneria suoneria = new Suoneria(); dal metodo main che si trova in un'altra classe e successivamente applicare a suoneria un metodo che la faccia suonare, ad es. suoneria.play();
  • Re: Trasformare un programma in una classe

    @andbin è sicuramente più esperto di me , in ogni caso io credo basti che tu inizializzi "Suoneria suoneria = new Suoneria();" nella classe in cui ti interessa e poi richiami "suoneria.metodo()" dove ti serve.
  • Re: Trasformare un programma in una classe

    "public static void main(String[] args){ ... } " lo trasformi in "public void avvia(){ //codice } ed una volta che inizializzi "Suoneria suoneria = new Suoneria();" poi richiami la funzione che ai scritto nel main (che adesso vuoi togliere) facendo "suoneria.avvia()".
  • Re: Trasformare un programma in una classe

    Sì, la soluzione "veloce" è banalmente quella di avere un

    public void avvia()

    (metodo di istanza! così è invocabile su un oggetto Suoneria)

    invece che il public static void main(String[] args)

    Ma si potrebbe migliorare di certo, sia come design in generale, sia come (ri)uso delle risorse della Java Sound API, sia sul trattamento delle eccezioni.
  • Re: Trasformare un programma in una classe

    Grazie ad entrambi,
    proverò e vi farò sapere.
  • Re: Trasformare un programma in una classe

    FUNZIONA!!!
Devi accedere o registrarti per scrivere nel forum
11 risposte