Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x scommette tutto, forse troppo, sulla batteria da 7500 mAh e sulla certificazione ArmorShell per farsi notare nella fascia più economica del mercato: lo abbiamo messo alla prova per capire a chi è rivolto questo smartphone che sacrifica un po' prestazioni, display e fotocamera per offrire l'autonomia migliore possibile a un prezzo decisamente contenuto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-09-2012, 20:53   #1
Sergei
Member
 
Iscritto dal: Oct 2001
Messaggi: 291
[JAVA] Impostare JTextArea da un'altra classe

Salve forum

sto praticamente impazzendo con la creazione di questo programmino inutile... ma ormai mi ha preso e finché non lo finisco sto male

Ho quasi sistemato tutto solo che ho un piccolo problema. In una classe devo fare in modo che modifichi il contenuto della JTextArea che è presente in un'altra classe. Ora, io ricordo che tempo fa chiesi già questa cosa risolvendo mi pare creando un oggetto nella classe con la JTextArea e poi passando questo oggetto al costruttore nella classe che mi deve modificare la Jtextarea. Il problema è che questa classe ha un Thread praticamente è più o meno così:
Codice:
public class CatturaThread implements Runnable {
	Boolean vero = true;
	String dati = "dati.txt";
	CatturaMetodi cm = new CatturaMetodi();
	CatturaAutomatica ca = new CatturaAutomatica();
	

	public void run() {
		try {
			FileOutputStream fos = new FileOutputStream(dati, true);
			while (vero != false) {
				String clip = cm.getClipboard();
				if (clip != null) {
					System.out.println(clip);
					ca.elenco.setText(clip);
					clip = clip + "\n";
					fos.write(clip.getBytes());
				}

				cm.setDelete();
				Thread.sleep(500);
			}
		} catch (Exception ecc) {
			System.out.println(ecc);
		}
	}
}
Si può passare l'oggetto come parametro nel metodo run? A dire la verità c'ho provato ma non funziona
C'è qualche modo?
Sergei è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2012, 06:36   #2
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Lo puoi passare nel costruttore.
Attenzione pero' che Swing non e' multithreaded....
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2012, 12:20   #3
Sergei
Member
 
Iscritto dal: Oct 2001
Messaggi: 291
ti ringrazio per la risposta

Ho provato ma non va lo stesso .

Codice:
public class CatturaAutomatica extends JFrame {

	private JPanel pannello;
	JScrollPane scrollBar;
	JButton btnAvvia;
	public JTextArea elenco;
	CatturaMetodi cm = new CatturaMetodi();
	Boolean vero = true;
	String versione = "0.1 beta";
	CatturaThread ct;
	CatturaAutomatica auto = this;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					CatturaAutomatica frame = new CatturaAutomatica();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public CatturaAutomatica() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 600, 445);
		pannello = new JPanel();
		pannello.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(pannello);
		pannello.setLayout(null);

		btnAvvia = new JButton("Avvia");
		btnAvvia.setBounds(236, 49, 117, 25);
		pannello.add(btnAvvia);

		scrollBar = new JScrollPane();
		scrollBar.setBounds(44, 118, 486, 277);
		pannello.add(scrollBar);

		elenco = new JTextArea();
		elenco.setEditable(false);
		elenco.setLineWrap(true);
		scrollBar.setViewportView(elenco);

		btnAvvia.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				if (e.getSource() == btnAvvia) {
					CatturaThread ct = new CatturaThread();
					Thread t = new Thread(ct);
					t.start();
					

				}
			}
		});

	}
}
Io ho creato CatturaAutomatica auto = this; che passo al costruttore, poi creo un oggetto di CatturaAutomatica (esempio ca) e do ca = auto; giusto?
Poi associo ca alla jtextarea e al metodo settext. Il problema è che quando passo al costruttore quella parte mi dice che devo implementare un metodo, lo implemento e mi ripiazza sotto run()

Forse è per questo che non va, boh
Sergei è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2012, 12:58   #4
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Sergei Guarda i messaggi
ti ringrazio per la risposta

Ho provato ma non va lo stesso .
<CUT>
Riesci a produrre un piccolo esempio che si possa postare e provare?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2012, 13:03   #5
Sergei
Member
 
Iscritto dal: Oct 2001
Messaggi: 291
Certo, anzi mi scuso per non averlo fatto direttamente

Classe main con interfaccia grafica:
Codice:
public class CatturaAutomatica extends JFrame {

	private JPanel pannello;
	JScrollPane scrollBar;
	JButton btnAvvia;
	public JTextArea elenco;
	CatturaMetodi cm = new CatturaMetodi();
	Boolean vero = true;
	String versione = "0.1 beta";
	CatturaThread ct;
	CatturaAutomatica auto = this;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					CatturaAutomatica frame = new CatturaAutomatica();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public CatturaAutomatica() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 600, 445);
		pannello = new JPanel();
		pannello.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(pannello);
		pannello.setLayout(null);

		btnAvvia = new JButton("Avvia");
		btnAvvia.setBounds(236, 49, 117, 25);
		pannello.add(btnAvvia);

		scrollBar = new JScrollPane();
		scrollBar.setBounds(44, 118, 486, 277);
		pannello.add(scrollBar);

		elenco = new JTextArea();
		elenco.setEditable(false);
		elenco.setLineWrap(true);
		scrollBar.setViewportView(elenco);

		btnAvvia.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				if (e.getSource() == btnAvvia) {
					CatturaThread ct = new CatturaThread();
					Thread t = new Thread(ct);
					t.start();
					

				}
			}
		});

	}
}
Classe che deve modificare la JTextArea
Codice:
public class CatturaThread implements Runnable {
	Boolean vero = true;
	String dati = "dati.txt";
	CatturaMetodi cm = new CatturaMetodi();
	CatturaAutomatica ca;
	
	

	public void run(CatturaAutomatica auto) {
		ca = auto;
		try {
			FileOutputStream fos = new FileOutputStream(dati, true);
			while (vero != false) {
				String clip = cm.getClipboard();
				if (clip != null) {
					System.out.println(clip);
					ca.elenco.setText(clip);
					clip = clip + "\n";
					fos.write(clip.getBytes());
				}

				cm.setDelete();
				Thread.sleep(500);
			}
		} catch (Exception ecc) {
			System.out.println(ecc);
		}
	}



	@Override
	public void run() {
		// TODO Auto-generated method stub
		
	}


}
Classe con i metodi vari
Codice:
public class CatturaMetodi {
	// If a string is on the system clipboard, this method returns it;
	// otherwise it returns null.
	public static String getClipboard() {
		Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard()
				.getContents(null);

		try {
			if (t != null && t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
				String text = (String) t
						.getTransferData(DataFlavor.stringFlavor);
				return text;

			}
		} catch (UnsupportedFlavorException e) {
		} catch (IOException e) {
		}
		return null;
	}

	// This method writes a string to the system clipboard.
	// otherwise it returns null.
	public static void setClipboard(String str) {
		StringSelection ss = new StringSelection(str);
		Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
	}

	// Quando viene invocato questo metodo cancellera' il contenuto presente
	// nella clipboard
	public static void setDelete() {
		Toolkit.getDefaultToolkit().getSystemClipboard()
				.setContents(new Transferable() {
					public DataFlavor[] getTransferDataFlavors() {
						return new DataFlavor[0];
					}

					public boolean isDataFlavorSupported(DataFlavor flavor) {
						return false;
					}

					public Object getTransferData(DataFlavor flavor)
							throws UnsupportedFlavorException {
						throw new UnsupportedFlavorException(flavor);
					}
				}, null);
	}

}
Sergei è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2012, 21:06   #6
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Dear
scusa il ritardo, ma il padrone di casa mi ha cacciato fuori senza alcun preavviso poiche' qualcuno era interessato al mio appartamento, e ho dovuto trovarne un altro in tutta fretta.

Scusami anche per averti dato un suggerimento forse un po' troppo stringato: quando dicevo di passarlo nel costruttore, intendevo questo:

Codice:
public class CatturaThread implements Runnable
{
...
    public CatturaThread (CatturaAutomatica catturaAutomatica)
    {
        ca = catturaAutomatica;
    }
il metodo run() doveva restare senza costruttori, quindi il codice che hai scritto nel metodo run(CatturaAutomatica auto) non veniva mai eseguito.

Se ho interpretato bene il tuo pensiero, qui trovi il codice modificato:

Codice:
import java.io.*;

public class CatturaThread implements Runnable
{
    Boolean vero = true;
    String dati = "dati.txt";
    CatturaMetodi cm = new CatturaMetodi();
    CatturaAutomatica ca;

    public CatturaThread (CatturaAutomatica catturaAutomatica)
    {
        ca = catturaAutomatica;
    }

    @Override
    public void run()
    {
        try
        {
            FileOutputStream fos = new FileOutputStream(dati, true);
            while (vero != false)
            {
                String clip = cm.getClipboard();
                if (clip != null)
                {
                    System.out.println(clip);
                    ca.elenco.setText(clip);
                    clip = clip + "\n";
                    fos.write(clip.getBytes());
                }

                cm.setDelete();
                Thread.sleep(500);
            }
        }
        catch (Exception ecc)
        {
            System.out.println(ecc);
        }
    }
}

import java.io.*;
import java.awt.*;
import java.awt.dnd.*;
import java.awt.datatransfer.*;

public class CatturaMetodi
{
    // If a string is on the system clipboard, this method returns it;
    // otherwise it returns null.
    public static String getClipboard()
    {
        Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);

        try
        {
            if (t != null && t.isDataFlavorSupported(DataFlavor.stringFlavor))
            {
                String text = (String) t.getTransferData(DataFlavor.stringFlavor);
                return text;
            }
        }
        catch (UnsupportedFlavorException e)
        {
        }
        catch (IOException e)
        {
        }
        return null;
    }

    // This method writes a string to the system clipboard.
    // otherwise it returns null.
    public static void setClipboard(String str)
    {
        StringSelection ss = new StringSelection(str);
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
    }

    // Quando viene invocato questo metodo cancellera' il contenuto presente
    // nella clipboard
    public static void setDelete()
    {
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new Transferable()
        {
                public DataFlavor[] getTransferDataFlavors()
                {
                    return new DataFlavor[0];
                }

                public boolean isDataFlavorSupported(DataFlavor flavor)
                {
                    return false;
                }

                public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException
                {
                    throw new UnsupportedFlavorException(flavor);
                }
        }, null);
    }
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;

public class CatturaAutomatica extends JFrame
{

    private JPanel pannello;
    JScrollPane scrollBar;
    JButton btnAvvia;
    public JTextArea elenco;
    CatturaMetodi cm = new CatturaMetodi();
    Boolean vero = true;
    String versione = "0.1 beta";
    CatturaThread ct;
    CatturaAutomatica auto = this;

    /**
     * Launch the application.
     */
    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                try
                {
                    CatturaAutomatica frame = new CatturaAutomatica();
                    frame.setVisible(true);
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public CatturaAutomatica()
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 600, 445);
        pannello = new JPanel();
        pannello.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(pannello);
        pannello.setLayout(null);

        btnAvvia = new JButton("Avvia");
        btnAvvia.setBounds(236, 49, 117, 25);
        pannello.add(btnAvvia);

        scrollBar = new JScrollPane();
        scrollBar.setBounds(44, 118, 486, 277);
        pannello.add(scrollBar);

        elenco = new JTextArea();
        elenco.setEditable(false);
        elenco.setLineWrap(true);
        scrollBar.setViewportView(elenco);

        final CatturaAutomatica  myself = this;
        btnAvvia.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {

                if (e.getSource() == btnAvvia)
                {
                    CatturaThread ct = new CatturaThread(myself);
                    Thread t = new Thread(ct);
                    t.start();
                }
            }
        });
    }
}
Questo codice ha l'effetto di mostrare nella text area il testo che e' stato copiato nella clipboard di sistema.


Gli import li ho aggiunti grossolanamente a mano, ma il tuo ambiente sapra' far di meglio.

Spero di esserti stato d'aiuto
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2012, 14:18   #7
Sergei
Member
 
Iscritto dal: Oct 2001
Messaggi: 291
Ti ringrazio per la risposta

Sono proprio rinco, avrei dovuto pensarci prima, avevo fatto proprio così con un altro programma, solo che la concentrazione ogni tanto va a farsi friggere e avevo scambiato il metodo run() per il costruttore

Funziona! Grazie mille!

L'unico problema è copia il testo nella jtextarea ma poi il testo dopo anziché andare a capo va a sostituirsi a quello già esistente, non ho capito bene il perché di questo nonostante abbia provato con ca.elenco.setText(clip + "\n"); e setWrapStyleWord(true);
uhm, mi pare strano... c'è qualcosa che ancora una volta mi sfugge

Ultima modifica di Sergei : 09-09-2012 alle 14:20.
Sergei è offline   Rispondi citando il messaggio o parte di esso
Old 10-09-2012, 05:32   #8
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Sergei Guarda i messaggi
Ti ringrazio per la risposta

Sono proprio rinco, avrei dovuto pensarci prima, avevo fatto proprio così con un altro programma, solo che la concentrazione ogni tanto va a farsi friggere e avevo scambiato il metodo run() per il costruttore

Funziona! Grazie mille!

L'unico problema è copia il testo nella jtextarea ma poi il testo dopo anziché andare a capo va a sostituirsi a quello già esistente, non ho capito bene il perché di questo nonostante abbia provato con ca.elenco.setText(clip + "\n"); e setWrapStyleWord(true);
uhm, mi pare strano... c'è qualcosa che ancora una volta mi sfugge
Ti basta aggiungere una linea nella CatturaThread.run():

Dove hai scritto:
Codice:
                if (clip != null)
                {
                    System.out.println(clip);
                    ca.elenco.setText(clip);
                    clip = clip + "\n";
                    fos.write(clip.getBytes());
                }
Potresti farlo diventare:
Codice:
                if (clip != null)
                {
                    System.out.println(clip);
                    String text = ca.elenco.getText() + "\n" + clip;
                    ca.elenco.setText(text);
                    clip = clip + "\n";
                    fos.write(clip.getBytes());
                }
Ti consiglio di aggiungere un controllo sulla dimensione del testo (il testo continua a crescere e se il programma gira per tanto tempo, le dimensioni potrebbero essere inaccettabili e rallentare l'esecuzione, o peggio ancora produrre un OutOfMemory).
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2012, 13:24   #9
Sergei
Member
 
Iscritto dal: Oct 2001
Messaggi: 291
perfetto, funziona!

Senti, una curiosità proprio a livello di logica, perché prima non funzionava?
Cioè scrivere ca.elenco.setText(clip + "\n"); non è equivalente a quello che mi hai consigliato perché chiaramente non funziona, solo che non riesco a capire il perché? Perché mancava il metodo getText()?

Grazie mille e scusa le domande
Sergei è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2012, 07:50   #10
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Sergei Guarda i messaggi
perfetto, funziona!

Senti, una curiosità proprio a livello di logica, perché prima non funzionava?
Cioè scrivere ca.elenco.setText(clip + "\n"); non è equivalente a quello che mi hai consigliato perché chiaramente non funziona, solo che non riesco a capire il perché? Perché mancava il metodo getText()?

Grazie mille e scusa le domande
Ti chiedo scusa un'altra volta per il ritardo.
Quello che ho scritto e':
1 - leggi il testo attualmente visualizzato nella text area;
2 - aggiungi il nuovo testo al testo precedente;
3 - visualizza il risultato con la setText();

quello che avevi scritto prima semplicemente visualizzava il contenuto corrente della clipboard (i.e. non sommava il contenuto attuale con quello precedente). Detto fra noi, mi piace anche di piu' ma si tratta di un parere personale.

ciao
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 12-09-2012, 12:03   #11
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Aggiungo che per appendere del testo a una JTextArea si può usare il metodo specifico "append"
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 14-09-2012, 19:18   #12
Sergei
Member
 
Iscritto dal: Oct 2001
Messaggi: 291
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Ti chiedo scusa un'altra volta per il ritardo.
Quello che ho scritto e':
1 - leggi il testo attualmente visualizzato nella text area;
2 - aggiungi il nuovo testo al testo precedente;
3 - visualizza il risultato con la setText();

quello che avevi scritto prima semplicemente visualizzava il contenuto corrente della clipboard (i.e. non sommava il contenuto attuale con quello precedente). Detto fra noi, mi piace anche di piu' ma si tratta di un parere personale.

ciao
afferrato

Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Aggiungo che per appendere del testo a una JTextArea si può usare il metodo specifico "append"
non so come mai non c'ho pensato subito
Sergei è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
ECOVACS T90S PRO OMNI Care Kit a 699€: 4...
iPhone Duo, i problemi di produzione con...
Lenovo e FIFA, il bilancio dei Mondiali ...
La Terra vista dalla Stazione Spaziale: ...
L'IA cinese ti spiega come produrre armi...
Nuova Fire TV Stick 4K e Telecomando Fir...
Addio Visa e Mastercard? L'Europa prepar...
Allarme IA in Florida: lo stato invoca i...
Tutte le Offerte Prime anticipate: robot...
Procura di Sassari e Oxygen Forensics: i...
Duo-Man trasforma iPhone Duo in un Walkm...
Questa carta da parati produce elettrici...
Perseverance scopre su Marte rocce mai o...
Batterie allo stato solido, Gotion alza ...
Caviar presenta la Black Edition di iPho...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:35.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v