|
|
it.comp.java
Frequently Asked Questions
versione 1.09
aggiornata a Gennaio 2003 (prima versione: Gennaio 1998)
La versione WWW di questa FAQ (se non la state giè leggendo) si trova a
http://space.tin.it/computer/csadun/javafaq.html.
Quest'ultima è sempre la versione più aggiornata. Ci sono dei mirror più o meno aggiornati a:
Se vuoi, prima di proseguire leggi le note relative a questa FAQ.
Questa FAQ in italiano su java e' mantenuta da Cristiano Sadun (cris@xtractor.com), essenzialmente elaborando o copiando le domande/risposte e i contributi apparsi sul newsgroup it.comp.java. Ovviamente, per motivi di spazio, non tutti i contributi sono considerati: generalmente, se possibile, si e' data preferenza ai contributi piu' dettagliati; ad es., per la domanda 'Che libro comprare per iniziare', una risposta come 'il libro X contiene a,b,c,d,...' e' generalmente preferita ad una del tipo 'compra X'. Questa non e', comunque, una regola generale, e i fattori necessari per l'inserimento sono soprattutto il tempo che ho di leggere le news, il fatto che abbia fame o meno (e che quindi usi il detto tempo per mangiare un panino o per scrivere) e, in ultima analisi, il caso :^) ).
Non rispondo, ovviamente, ne' dell'aggiornamento ne' dell'affidabilita' delle informazioni qui contenute, ne' di eventuali danneggiamenti conseguenti a qualunque uso delle stesse. Allo stesso modo, nessuna informazione ha intenzionalmente carattere pubblicitario o qualche effetto economico su di me o sull'autore del contributo.
Tuttavia, ogni correzione, commento o contributo e' benvenuto: per comodita', inviateli in email a crsadun@tin.it preponendo [JAVA FAQ] al subject.
La faq e' divisa in sezioni [SEZ], in approssimazione sui tipi di interventi apparsi sul newsgroup: domande tecniche, opinioni e valutazioni su strumenti e versioni, newbies-faq, etc. Ciascuna sezione puo' essere divisa in sottosezioni [SS] piu' dettagliate. Ciascuna sezione/sottosezione contiene una serie di domande[D]/risposte[R] o un thread [T] interessante su un argomento specifico.
Mirroring
Chiunque voglia farne un mirror, è benvenuto. L'unica condizione è di preservare il link alla "versione più aggiornata" nella nota sopra, e i link
agli altri mirror. Se volete comparire nell'elenco più sopra, mandatemi semplicemente una mail e
(tempo permettendo) sarete inclusi. Siete liberi di modificare la veste grafica a vostro piacimento.
Indice
|
[SEZ1] Principianti
|
| [D1.1] Come scaricare un'applet e metterla nella propria pagina |
| [D1.2] Si puo' spedire/ricevere email da un'applet? |
| [D1.3] Si puo' fare FTP da un'applet? |
| [D1.4] Imparare Java: devo conoscere C/C++? |
| [D1.5] Voglio imparare - come fare? |
| [D1.6] Esiste un'applet che... |
| [D1.7] Java su IE 4.0 ? |
| [D1.8] Come mai createImage non funziona ? |
| [D1.9] La mia applet non funziona su Communicator/IE/etc..!! |
| [D1.10] Esistono risorse in rete per Java (riviste/tutorial/manuali etc) ?
|
| [D1.11] Cos'e' un'architettura three-tier |
| [D1.12] Come si accede a un database <access,oracle,db2,...> da Java? |
| [D1.13] Cosa vuol dire rendere daemon un thread? |
| [D1.14] Come eseguire un semplice programma Java con il JDK? |
| [D1.15] Riesco a compilare ma non a lanciare il mio programma! Perche? |
| [D1.15a] Quando provo a lanciare il mio programma ho una ClassNotFoundException! Perche? |
| [D1.15a] Quando provo a lanciare il mio programma ho una NoClassDefFoundException! Perche? |
| [D1.16] A che servono le interfacce? |
| [D1.17] E' vero che Java non ha i puntatori? |
| [D1.18] Come mai clone() non funziona? |
| [D1.19] Cos'è una servlet? |
| [D1.20] Esistono motori servlet free? |
| [D1.21] Si può realizzare una CGI in Java? |
| [D1.22] Come faccio a riconoscere il sistema operativo? |
| [D1.23] Come faccio a lanciare un programma esterno? |
| [D1.24] Dov'e' classes.zip nel JDK1.2? (o 2, o 1.3 etc) ? |
| [D1.25] Si puo' accedere alla porta seriale? Come si fa? |
| [D1.26] Gulp! getenv() è stato deprecato! Che faccio? |
| [D1.27] Come faccio ad accedere alle variabili d'ambiente? |
| [D1.28] Swing, come farle funzionare con i browser? |
| [D1.29] Ho Windows 98 e il cursore del mouse mi pasticcia lo schermo! |
| [D1.30] C'è un editor che... |
| [D1.31] Lavorando a caratteri, come posso fare un clearscreen? (pulire lo schermo?) |
| [D1.32] Posso scrivere a colori sulla "console" di Java? |
| [D1.33] Come faccio a posizionare il cursore dove voglio sulla console? |
| [D1.34] C'è qualcosa di simile alla conio.h del C per controllare lo schermo a caratteri? |
| [D1.35] Come si mettono le virgolette (") in una stringa? |
| [D1.36] Ho un errore Unable to initialize threads: cannot find class java/lang/Thread! Cos'è? |
| [D1.37] Nello stack trace di un'eccezione c'è scritto "compiled code"! |
| [D1.38] Si può usare RMI in Internet Explorer? |
| [D1.39] RMI funziona in AppletViewer ma non in Internet Explorer! |
| [D1.40] Usando RMI con Internet Explorer ho un'eccezione ClassNotFoundException! |
| [D1.41] È possible accedere ad un database Access (od ODBC) da un'applet? |
| [D1.42] È possible creare un exe da una classe Java? |
| [D1.43] Ho cambiato il valore di java.class.path ma la JVM non trova ugualmente le mie classi! |
| [D1.44] Come faccio a sapere la directory corrente? |
| [D1.45] Posso lanciare un'applicazione senza avere aperta la finestra di console? |
| [D1.46] Com'e' che le operazioni coi double/float sono sbagliate? |
| [D1.47] Come mai in Java operazioni coi double/float danno risultati diversi che in C/C++? |
| [D1.48] Come faccio a leggere un'immagine (suono, file, etc) da un JAR? |
| [D1.49] getResource()/getResourceAsStream() mi funziona da Class ma non da ClassLoader! (o viceversa) |
| [D1.50] Java passa i parametri per valore, per variabile o per...? |
| [D1.51] Come faccio a copiare un file? |
| |
| [SEZ2] Domande tecniche |
| [SS2.0] Varie |
| [D2.0.1]Visualizzare le proprietà Java predefinite |
| [D2.0.2]Proprietà di console di Java |
| [D2.0.3]Come funziona java.class.path? |
| [D2.0.4]Come funzionano le operazioni con numeri reali (double/float)? |
| [D2.0.5]Il passaggio di parametri è per valore, per variabile, per indirizzo, per... ? |
| [SS2.1] Socket e comunicazioni |
| [D2.1.1]Un'applet puo' connettersi a un host (per fare ftp, spedire/leggere mail, etc) ? |
| [SS2.2] JDBC |
| [D2.2.1]Bridge JDBC/ODBC in IE3 e JDK |
| [D2.2.2]Accedere ad un database Access da remoto via RMI |
| [SS2.3] Compatibilita' C++ |
| [D2.3.1]E' possibile riusare codice C++
? |
| [D2.3.2]Mini-confronto tra Java e C++ |
| [SS2.4] Sicurezza ed applet firmate |
| [D2.4.1]Applet firmate |
| [SS2.5] Servlet |
| [D2.5.1]Cos'è una servlet? |
| [D2.5.2]Una servlet è un solo oggetto? |
| [SS2.6] RMI |
| [D2.6.1]Si può usare RMI con Internet Explorer 4/5? |
| |
| [SEZ3] Libri |
| [D3.1]Per Iniziare |
| |
| [SEZ4] Tools di sviluppo/reportistica |
| [D4.1.1] Sunsoft Java Workshop |
| [D4.2.1] Strumenti di reportistica |
| [D4.3.1]Editor e tools |
| |
| [SEZ5] Varie |
| [T5.1] Portabilita' vera e presunta - I |
| [T5.2] Prerequisiti per imparare Java |
| [T5.3] Java e C++ |
| [T5.4] Soluzioni di reportistica per Java |
FAQ
[D1.1] Come scaricare un'applet e metterla nella propria pagina
| Subject: | Aiuto su applet |
| Date: | Mon, 05 Jan 1998 20:52:16 GMT |
| From: | erikait@mbox.vol.it (Lele) |
| Organization: | Telecom Italia Net |
| Newsgroups: | it.comp.java |
Ciao sono un principiante del linguaggio java e sto cercando qualcuno che mi possa dire come fare per scaricare sul mio computer un pagina contenente degli applet java(giochi matematici) e poi passarli su una mia pagina personale.
L' indirizzo da cui cerco di scaricare e' www.cut-the-knot.com e la mia e-mail e' erikait@mbox.vol.it
Grazie Lele
[R1.1]
| Subject: | Re: Aiuto su applet |
| Date: | Tue, 06 Jan 1998 00:27:58 +0100 |
| From: | Alexis Paul Bertolini <bertolini@promo.it> |
| Organization: | Warehouse Creations |
| To: | Lele <erikait@mbox.vol.it> |
| Newsgroups: | it.comp.java |
1) Vai alla pagina che ti serve (nel nostro esempio
http://www.cut-the-knot.com/SimpleGames/Horse.html)
2) Guarda il codice sorgente della pagina
3) A un certo punto trovi il seguente testo:
<APPLET CODE="Horse.class" WIDTH=360 HEIGHT=280>
<param name="fcolor" value="000000">
<param name="bcolor" value="c0dcc0">
</APPLET>
4) Tu necessiti del file Horse.class, disponibile all'URL
http://www.cut-the-knot.com/SimpleGames/
5) Digita questa URL e "track!" ecco il contenuto della directory, horse.class compreso. Nota che ci sono anche altri .class, e' molto probabile che ti servano!
Horse.class 20-Oct-97 20:07 2k
Horse.html 01-Jan-98 14:48 3k
HorseCanvas.class 20-Oct-97 22:11 7k
HorsePanel.class 20-Oct-97 20:07 2k
6) Scaricati questi file, falli girare un po', vedi se funziona,
inserisci il codice del punto 3) nella tua pagina preferita, metti i file del punto 5) nella stessa localita' (sito, directory, etc.) e hai passato il gioco alla tua home!
7) Comunica al sottoscritto l'URL della tua home.
[D1.2] Si puo' spedire/ricevere email da un'applet?
[R1.2] [R1.2.1]
| Subject: | mail in java
| | Date: | Wed, 16 Dec 1998 13:51:58 GMT
| | From: | sergiolc@iol.it
| | Organization: | Italia Online
| | Newsgroups: | it.comp.java |
(Java1.1)
E' possibile con un applet spedire dei messaggi (o megli dei dati acquisiti con dei TextField) in un indirizzo di posta elettronica?
Per adesso sono limitato a generare un file soltanto nel sito web di provenienze della mia applet.
JavaMai1.1 (che nel frattempo sto scaricando) può servirmi in questo?
[R1.2]
| Subject: | Re: mail in java
| | Date: | Thu, 17 Dec 1998 15:30:06 +0100
| | From: | flavio caocci <flavio.caocci@fiatgsa.it>
| | Organization: | Fiat GSA
To: sergiolc@iol.it
| | Newsgroups: | it.comp.java |
sergiolc@iol.it wrote:
E' possibile. Ti allego un esempio che ho avuto da un tecnico Sun Utilizzare previa installazione di JavaMail
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
/**
* usage: sendmessage to from smtphost multipart
*
* Send a simple text/plain message to the "to"
* address, from the "from" address, using the
* smtphost as the machine with the smtp server
* running.
*
* if multipart is "true" send a multipart message
* else if multipart is "false" send a text/plain
* message.
*/
public class sendmessage {
public static void main(String[] args) {
if (args.length != 4) {
System.out.println( "usage: sendmessage <to> <from> <smtphost> <true|false>");
System.exit(1);
}
boolean debug = false;
// change to get more information
String msgText = "A body.\nthe second line.";
String msgText2 = "Another body.\nmore lines";
boolean sendmultipart = Boolean.valueOf(args[3]).booleanValue();
// set the host
Properties props = new Properties();
props.put("mail.smtp.host", args[2]);
// create some properties and get the default Session
Session session = Session.getDefaultInstance(props, null);
session.setDebug(debug);
try { // create a message
Message msg = new MimeMessage(session);
// set the from
InternetAddress from = new InternetAddress(args[1]);
msg.setFrom(from);
InternetAddress[] address = {new InternetAddress(args[0])};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject("JavaMail APIs Test");
if (!sendmultipart) { // send a plain text message
msg.setContent(msgText, "text/plain");
} else {
// send a multipart message
// create and fill the first message part
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setContent(msgText, "text/plain");
// create and fill the second message part
MimeBodyPart mbp2 = new MimeBodyPart();
mbp2.setContent(msgText2, "text/plain");
// create the Multipart and its parts to it
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
// add the Multipart to the message
msg.setContent(mp);
}
Transport.send(msg);
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
[R1.2.1]
Vedi inoltre [R2.1.1]
[D1.3] Si puo' fare FTP da un'applet?
[R1.3]
Vedi [R2.1.1] per sapere verso che hosts si può fare FTP.
Per quanto riguarda il come, ci sono vari metodi:
- Usare un URL "ftp" per prelevare un file:
try {
URL u = new URL("ftp://pippo.com/mio/file.txt");
URLConnection uc = u.openConnection();
uc.setDoInput(true);
uc.connect();
InputStream is = uc.getInputStream();
...codice che legge lo stream di input
} catch (Exception e) {
e.printStackTrace();
}
- Se si usa la JVM Sun, avvalersi del client ftp gia' fornito col JDK (ma "nascosto" nelle classi implementative Sun) sun.net.ftp.FtpClient.
- Usare un client FTP costruito ad hoc. Ecco ad esempio:
| Subject: | Re: FTP con il JAVA: Come?
| | Date: | 16 Oct 1999 09:53:01 +0200
| | From: | Marco Pozzato
| Organization: | TIN
| | Newsgroups: | it.comp.java |
|
"tqt" == togliere questo testo writes:
tqt>
tqt> Quale funzione permette di upgradare e/o trasferire file su una
tqt> directory di un dominio
tqt> protetto con password ecc... ecc...?
Ecco quà quello che ti serve.
---------------------------------------------------------------------
//////////////////////////////////////////
/// split here for Linlyn.java //
// At last! Java code to read/write files on the server from an applet!
// This is the famous Linlyn code.
//
// Use:
// compile this file, and have your applet call it as below.
//
// to upload a file:
// Linlyn ftp = new Linlyn( <servername>, <user>, <password> );
// ftp.upload( <directory>, <filename>, <contents of file> );
//
// to download a file:
// Linlyn ftp = new Linlyn( <servername>, <user>, <password> );
// String contents = ftp.download( <directory>, <filename> );
//
// the default is ASCII transfer, an overloaded method does bin.
//
// All parameters and return values are Strings. E.g.
// Linlyn ftp = new Linlyn( "rtfm.mit.edu", "anonymous", "linden@@" );
// String contents = ftp.download(
// "/pub/usenet-by-group/comp.lang.java.programmer"
// "Java_Programmers_FAQ" );
//
// [the actual values above are not generally valid, substitute
// your own server for your first attempt, see note 1.]
//
// Notes:
// 1. Usual applet security rules apply: you can only get a file
// from the server that served the applet.
// 2. The applet server must also be an FTP server. This is NOT true
// for some ISPs, such as best.com. They have separate FTP and
// http machines. This code may work on such a setup if you put
// the classfiles into the ftp area, and in the HTML file say:
// <applet codebase="ftp:///home/linden/ftp" code="t.class"
// 3. This code does not break Java security.
// It uses FTP to transfer files. If the author of the applet
// has FTP disabled you are out of luck.
// It breaks regular system security however, as it publishes
// (effectively) your ftp password. Only use on an Intranet and
// with authorization.
// 4. Compiling this causes some deprecation warnings. We wanted to
// stick with code that would work in JDK 1.0 browsers.
// 5. Each upload or download creates, uses, and terminates a new
// ftp session. This is intended for low volume transfer, such
// as the ever popular high-score files.
// 6. Look at the source for the methods for binary transfers.
//
// Version 1.0 May 6 1998.
// Version 1.1 May 20 1998. -- added a debugging flag
// Version 1.1a May 26 1998. -- fixed the ASCII/BIN flag inversion
// Version 1.1b May 29 1998. -- added the security warning.
// Version 2.0 Jul 1, 1998. -- Updated to parse multi-string responses
// a la RFC 959
// Version 2.1 Aug 5, 1998. -- Updated to work with VMS ftp servers
// VMS does not send either a ")" OR a ")."
// terminating the IP number, port sequence
// in response to PASV.
// Version 2.1a Aug 6, 1998 -- more than one line as a "hello" message.
// (tvalesky@@patriot.net)
//
// Authors:
// Robert Lynch
// Peter van der Linden (Author of "Just Java 1.1" book).
//
// Support:
// Unsupported: That's why we give you the source.
// Help may be available on time & materials basis only.
// You can get copious debug information by changing the
// commented lines in Linlyn.java below and recompiling.
//
// Copyright 1998 Robert Lynch, Peter van der Linden
// This work is distributed under the GNU GPL, version 2.
//
// Those using the code do so at their own risk and the authors
// are not responsible for any costs, loss, or damage which may
// thereby be incurred.
import java.io.*;
import java.net.*;
import java.util.*;
class Linlyn {
// FOR INITIAL DEBUGGING: set the variable to "true"
private boolean DEBUG = false;
// constructor needs servername, username and passwd
public Linlyn(String server, String user, String pass) {
try {
ftpConnect(server);
ftpLogin(user, pass);
} catch(IOException ioe) {ioe.printStackTrace();}
}
public String download(String dir, String file)
throws IOException { return download(dir, file, true); }
public String download(String dir, String file, boolean asc)
throws IOException {
ftpSetDir(dir);
ftpSetTransferType(asc);
dsock = ftpGetDataSock();
InputStream is = dsock.getInputStream();
ftpSendCmd("RETR "+file);
String contents = getAsString(is);
ftpLogout();
return contents;
}
public void upload(String dir, String file, String what)
throws IOException { upload(dir, file, what, true); }
public void upload(String dir, String file, String what, boolean asc)
throws IOException {
ftpSetDir(dir);
ftpSetTransferType(asc);
dsock = ftpGetDataSock();
OutputStream os = dsock.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
ftpSendCmd("STOR "+file);
dos.writeBytes(what);
dos.flush();
ftpLogout();
}
///////////////// private fields ////////////////////
private String getAsString(InputStream is) {
int c=0;
char lineBuffer[]=new char[128], buf[]=lineBuffer;
int room= buf.length, offset=0;
try {
loop: while (true) {
// read chars into a buffer which grows as needed
switch (c = is.read() ) {
case -1: break loop;
default: if (--room < 0) {
buf = new char[offset + 128];
room = buf.length - offset - 1;
System.arraycopy(lineBuffer, 0,
buf, 0, offset);
lineBuffer = buf;
}
buf[offset++] = (char) c;
break;
}
}
} catch(IOException ioe) {ioe.printStackTrace();}
if ((c == -1) && (offset == 0)) {
return null;
}
return String.copyValueOf(buf, 0, offset);
}
private void ftpConnect(String server)
throws IOException {
// Set up socket, control streams, connect to ftp server
// Open socket to server control port 21
csock = new Socket(server, CNTRL_PORT);
// Open control streams
InputStream cis = csock.getInputStream();
dcis = new DataInputStream(cis);
OutputStream cos = csock.getOutputStream();
pos = new PrintStream(cos);
// handle more than one line returned
String reply = dcis.readLine();
String numerals = reply.substring(0, 3);
String hyph_test = reply.substring(3, 4);
String next = null;
if(hyph_test.equals("-")) {
boolean done = false;
while(!done) { // read lines til find "" -> last line
next = dcis.readLine();
if(next.substring(0,3).equals(numerals) &&
next.substring(3, 4).equals(" "))
done = true;
}
}
if(numerals.substring(0,3).equals("220")) // ftp server alive
; // System.out.println("Connected to ftp server");
else System.err.println("Error connecting to ftp server.");
}
private void ftpLogin(String user, String pass)
throws IOException {
ftpSendCmd("USER "+user);
ftpSendCmd("PASS "+pass);
}
private void ftpSetDir(String dir)
throws IOException {
// cwd to dir
ftpSendCmd("CWD "+dir);
}
private void ftpSetTransferType(boolean asc)
throws IOException {
// set file transfer type
String ftype = (asc? "A" : "I");
ftpSendCmd("TYPE "+ftype);
}
private Socket ftpGetDataSock()
throws IOException {
// Go to PASV mode, capture server reply, parse for socket setup
// V2.1: generalized port parsing, allows more server variations
String reply = ftpSendCmd("PASV");
// New technique: just find numbers before and after ","!
StringTokenizer st = new StringTokenizer(reply, ",");
String[] parts = new String[6]; // parts, incl. some garbage
int i = 0; // put tokens into String array
while(st.hasMoreElements()) {
// stick pieces of host, port in String array
try {
parts[i] = st.nextToken();
i++;
} catch(NoSuchElementException nope){nope.printStackTrace();}
} // end getting parts of host, port
// Get rid of everything before first "," except digits
String[] diggies = new String[3];
for(int j = 0; j < 3; j++) {
// Get 3 characters, inverse order, check if digit/character
diggies[j] = parts[0].substring(parts[0].length() - (j + 1),
parts[0].length() - j); // next: digit or character?
if(!Character.isDigit(diggies[j].charAt(0)))
diggies[j] = "";
}
parts[0] = diggies[2] + diggies[1] + diggies[0];
// Get only the digits after the last ","
String[] porties = new String[3];
for(int k = 0; k < 3; k++) {
// Get 3 characters, in order, check if digit/character
// May be less than 3 characters
if((k + 1) <= parts[5].length())
porties[k] = parts[5].substring(k, k + 1);
else porties[k] = "FOOBAR"; // definitely not a digit!
// next: digit or character?
if(!Character.isDigit(porties[k].charAt(0)))
porties[k] = "";
} // Have to do this one in order, not inverse order
parts[5] = porties[0] + porties[1] + porties[2];
// Get dotted quad IP number first
String ip = parts[0]+"."+parts[1]+"."+parts[2]+"."+parts[3];
// Determine port
int port = -1;
try { // Get first part of port, shift by 8 bits.
int big = Integer.parseInt(parts[4]) << 8;
int small = Integer.parseInt(parts[5]);
port = big + small; // port number
} catch(NumberFormatException nfe) {nfe.printStackTrace();}
if((ip != null) && (port != -1))
dsock = new Socket(ip, port);
else throw new IOException();
return dsock;
}
private String ftpSendCmd(String cmd)
throws IOException
{ // This sends a dialog string to the server, returns reply
// V2.0 Updated to parse multi-string responses a la RFC 959
// Prints out only last response string of the lot.
pos.print(cmd + "\r\n" );
String reply = dcis.readLine();
String numerals = reply.substring(0, 3);
String hyph_test = reply.substring(3, 4);
String next = null;
if(hyph_test.equals("-")) {
boolean done = false;
while(!done) { // read lines til find "" -> last line
next = dcis.readLine();
if(next.substring(0,3).equals(numerals) &&
next.substring(3, 4).equals(" "))
done = true;
}
if(DEBUG)
System.out.println("Response to: "+cmd+" was: "+next);
return next;
} else
if(DEBUG)
System.out.println("Response to: "+cmd+" was: "+reply);
return reply;
}
private void ftpLogout() {// logout, close streams
try {
if(DEBUG) System.out.println("sending BYE");
pos.print("BYE" + "\r\n" );
pos.flush();
pos.close();
dcis.close();
csock.close();
dsock.close();
} catch(IOException ioe) {ioe.printStackTrace();}
}
private static final int CNTRL_PORT = 21;
private Socket csock = null;
private Socket dsock = null;
private DataInputStream dcis;
private PrintStream pos;
}
[D1.4] Imparare Java: devo conoscere C/C++?
[R1.4]
Le opinioni sono diverse. Vedi [T5.2] per una discussione approfondita.
[D1.5] Voglio imparare - come fare?
[R1.5]
Le risorse principali per Java si trovano su http://java.sun.com o http://javasoft.sun.com. E' qui' disponibile un ottimo tutorial (in inglese). Lo stesso puo' essere scaricato piu' velocemente da uno dei numerosi SunSite esistenti - ad esempio sunsite.dsi.unimi.it al DSI di Milano.
Per quanto riguarda i libri su Java, vedi la sezione [SEZ3]
[D1.6] Esiste un'applet che...
[R1.6]
Esistono in rete numerosi depositi (repository) di applet gia' belle e pronte.
Uno dei piu' grandi e' "Gamelan" (http://www.gamelan.com), dotato anche di un efficace motore di ricerca.
Vedi anche [R1.10].
[D1.7] Java su IE 4.0 ?
| Subject: | Jdk 1.1.4 e IE 4.0
| | Date: | Sun, 18 Jan 1998 10:19:41 +0100
| | From: | Alessandro Giovanelli <giovanel@abanet.it>
| | Organization: | Italia Com - Il Primo Consorzio di Internet Providers italiani
| | Newsgroups: | it.comp.java |
C'e' nessuno che mi sda dire se esiste un patches per IE 4 per far girare applet JDK 1.1.4.
Con Comm. 4.0.4 funziona tutto alla perfezione (Swing e JFC comprese) ma con IE 4.0 ci sono problemi.
[R1.7]
| Subject: | Re: Jdk 1.1.4 e IE 4.0
| | Date: | Mon, 19 Jan 1998 12:23:51 +0100
| | From: | Francesco Ciacca <francesco@sinapsi.com>
| | Organization: | Sinapsi s.r.l.
| | Newsgroups: | it.comp.java |
Alessandro Giovanelli wrote:
Non so se ti puo' andar bene come soluzione , ma adesso Sun distribuisce free un plug-in per IE (>=3.0) e Netscape (se non mi sbaglio >=3.0,forse la 2.0 ma non ricordo bene)che si sostituisce alla JVM del browser in uso con una complemetamente jdk 1.1.X (RMI ecc..) compliant.
Questo prodotto (forse e' ancora in beta ma funziona) si chiama Java Activator [Oggi Java Plugin, -cs], lo trovi su http://www.javasoft.com/plugin
E' un po' esigente in termini di memoria e non e' velocissimo, ma le prossime release dovrebbero superare almeno in parte questi problemi.
[D1.8] Come mai createImage non funziona ?
| Subject: | Double buffering
| | Date: | Mon, 19 Jan 1998 09:55:59 +0100
| | From: | Gianluca Maggio <maggio@iesi.ba.cnr.it>
| | Organization: | CNR - Area di Ricerca - Bari,Italy
| | Newsgroups: | it.comp.java |
Qualcuno mi sa dire perche' utilizzando il double buffering sono costretto a creare l'immagine "off-screen" nel metodo update o paint e non nel costruttore della mia classe?
Il problema non e' solo estetico poiche' sono costretto a effettuare un test del tipo:
if (offScreenImage == null)
offScreebImage = createImage(200,200);
ogni volta che update viene chiamato (nel mio caso dalle 20 alle 40 volte al secondo).
Perche' se uso createImage nel costruttore ho un null-pointer, o meglio perche' non mi crea l'immagine?
[R1.8]
| Subject: | Re: Double buffering
| | Date: | Mon, 19 Jan 1998 17:34:23 +0100
| | From: | "Leonardo Boselli" <boselli@technologist.com>
| | Organization: | TETRACTYS Software
| | Newsgroups: | it.comp.java |
Se si tratta di un'applet devi inserire
offScreenImage = createImage(200,200);
nel metodo init(), che viene chiamato per inizializzare l'applet prima di utilizzare repaint().
[D1.9] La mia applet non funziona su Communicator/IE/etc..!!
[R1.9]
Ciascun browser contiene la *propria* JVM (Java Virtual Machine): le versioni 3.x di IE e Navigator supportano la versione 1.0.2 di Java: le applet costruite con versioni successive (1.1.x o 1.2) di Java *NON* possono funzionare.
Communicator (anche la versione 4.04) supporta solo *parzialmente* la versione 1.1, a meno che non sia venga installata la patch apposita usando SmartUpdate oppure
disponbile in
http://developer.netscape.com/software/jdk/download.html#WIN32_MANUAL_INSTALL
(courtesy of Hacker Hobos <hackerhobos@tin.it>).
Per IE4 potete provare l'Activator (cfr. [D1.7]).
[D1.10] Esistono risorse in rete per Java (riviste/tutorial/manuali etc) ?
[R1.10] [R1.10.1]
[R1.10]
(Vedi anche [SEZ3])
- Il sito ufficiale per java (inglese): http://java.sun.com
Contiene un tutorial inglese fatto molto bene e piuttosto aggiornato
JARS (inglese): http://www.jars.com
Contiene una quantita' notevole di software esistente, freeware, shareware e dimostrativo
Mokabyte (italiano): http://mokabyte.infomedia.it
Rivista di programmazione
Java Lobby (inglese): http://www.javalobby.org
Il nome dice tutto
Il corso Java di Michele Sciabarrà (italiano): http://www.corsojava.it
Un corso introduttivo in italiano, in HTML. Scaricabile direttamente a http://www.corsojava.it/corsojava.zip
Thinking in Java (inglese), il libro di Bruce Eckel su java
Uno dei migliori libri introduttivi all'object orientation in generale e a java in particolare
[R1.10.1]
| Subject: | Re: All
| | Date: | Sun, 06 Dec 1998 15:10:22 GMT
| | From: | TTIOOT@z.r
| | Organization: | Customer of Flashnet S.p.A. - http://www.flashnet.it
| | Newsgroups: | it.comp.java |
>Giorno.. sto cercando una buona guida On-Line per imparare a programmare in
>Java.
>Premetto che di tale linguaggio di programmazione so meno di zero.
Ti mando il testo di un messaggio da me postato settimane or sono proprio per chi come te parte da zero.
Spero che queste sintetiche indicazioni siano utili per i molti che, volendo cimentarsi con Java, non sanno da dove iniziare.
Su www.javasoft.com si trovano tre cose indispensabili e sufficienti
per iniziare:
- L' ambiente di sviluppo (JDK)
- La documentazione delle classi
- Il Tutorial
Vi permetteranno di imparare i fondamentali di Java e di avere una panoramica esaustiva sul linguaggio.
Su www.mcp.com trovi molti libri di programmazione in formato
eletronico (su Java e su altri linguaggi) che possono esserti utili.
Su www.gamelan.com trovate un repository di applet e applicazioni (molti sono prodotti commerciali ma non mancano shareware e freeware con sorgenti a disposizione)
Infine suggerisco le riviste tipo mokabyate (www.mokabyte.it)
o www.javaworld.com.
Efisio Bova
[D1.11] Cos'e' un'architettura three-tier
[R1.11]
| Subject: | Re: Problemi di sicurezza
| | Date: | Tue, 24 Feb 1998 10:48:05 +0100
| | From: | Roberto Lo Giacco <guybrush@siasys.it>
| | Organization: | Excess Software
| | Newsgroups: | it.comp.java |
[ho fatto una minima variazione per chiarezza -cris]
Se il server a cui [l'applet] deve collegarsi è diverso da quello dal quale hai downloadato la pagina html allora la connessione two-tier (client-server) è impossibile causa tipologia restrizioni di sicurezza predefinite per le applet ed in questo caso devi sviluppare una architettura three-tier ossia una applicazione che gira sul server e che non è altro che un intermediario con il server di prima...
---------- ---------------- ------------
| Applet | <<<--->>> | Applicazione | <<<--->>> | Servizio |
---------- ---------------- ------------
CLIENT STESSA MACCHINA SERVER SERVIZIO
SU CUI GIRA IL
SERVER HTTP
[D1.12] Come si accede a un database <access,oracle,db2,...> da Java?
| Subject: | Java & basi di dati
| | Date: | Wed, 18 Mar 1998 12:28:11 +0100
| | From: | Alberto d'Onofrio <donofrio@merlino.iasi.rm.cnr.it>
| | Organization: | IASI CNR
| | Newsgroups: | it.comp.java |
Buongiorno,
devo realizzare un programma in Java (che stu studiando alacremente, ma di cui non posso dirmi certo un esperto) per uso accademico che ha la necessita' di salvare ed interrogare dei dati. Conosco bene MS Access e Visual Basic ed avevo pensato a questo tipo di base di dati.
E' possibile far interagire Java con un database Microsoft ?
Sono necessari drivers particolari, come mi sembra di aver capito ?
Che esperienze avete fatto in merito ? Che mi consigliate ?
[R1.12]
| Re: | Java & basi di dati
| | Date: | Thu, 19 Mar 1998 14:57:17 +0100
| | From: | Cristiano Sadun <no@spam.grazie>
| | To: | Alberto d'Onofrio <donofrio@merlino.iasi.rm.cnr.it>
| | Newsgroups: | it.comp.java |
(cfr. anche [D1.41]) JDBC e' l'architettura standard di accesso ad database per Java.
Essa consiste in un insieme di interfacce standard (viste dall'applicazione), nel package java.sql, per le quali ciascun produttore di db fornisce un'implementazione (driver JDBC).
JDBC e' *compresa* nelle versioni di Java superiori o uguali alla 1.1 - per Java 1.0.2 e' necessario aggiungere il supporto JDBC esplcitamente (per esempio, dal sito dall'intersolv, http://www.intersolv.com).
Nei JDK >= 1.1 viene fornito anche un driver che fa uso di ODBC (detto 'bridge jdbc-odbc'),
che permette di accedere direttamente a database ODBC compliant.
Attenzione: per le applet, sia Netscape che IE possiedono il supporto JDBC, ma richiedono tecniche diverse per attuarlo (cfr.[D2.2.1]).
Le guide all'uso di JDBC si trovano, come sempre, a java.sun.com.
[D1.13] Cosa vuol dire renere daemon un thread?
| Subject: | Daemon thread
| | Date: | Mon, 19 Oct 1998 17:05:40 +0200
| | From: | David Visicchio <dvisicchio@atel.it>
| | Organization: | Centro Servizi Interbusiness
| | Newsgroups: | it.comp.java |
Ho creato un'applicazione server che gestisce una connessione via socket.
Ora vorrei trasformare tale applicazione in un demone in modo da poterlo lanciare in background. [Leggete la risposta! SetDaemon non serve a questo!] A tal fine ho invocato la funzione setDaemon con true e ho reso la funzione run senza uscita. Quando lancio l'applicazione però il demone muore...
Riporto di seguito una parte del codice di esempio.
Grazie
[R1.13]
| Subject: | Re: Daemon thread
| | Date: | Mon, 19 Oct 1998 15:34:13 GMT
| | From: | bossola@to.NOSPAM.it (Bruno Bossola)
| | Organization: | Atos SpA
| | Newsgroups: | it.comp.java |
Chiamando la setDaemon(true) fai esattamente l'inverso di quello che vorresti! ;-D
L'applicazione Java, infatti, termina quando tutti i thread non-demoni sono terminati e quindi, appena termina il main(), viene concluso l'unico thread non demone che funzionava (quello che eseguiva il main) e la VM esce!
Se vuoi che la VM stia su se il tuo thread gira, devi fare esattamente il contrario, ovvero setDaemon(false).
Per poi lanciare l'applicazione come demone, beh, devi usare le
funzionalità offerte dal tuo OS.
[D1.14] Come eseguire un semplice programma con il JDK?
| Subject: | DOMANDA: Come eseguire un semplice programma con il JDK?
| | Date: | Sat, 26 Dec 1998 13:19:06 GMT
| | From: | rinonucara*antispam@mclink.it_antispam
| | Organization: | MC-link The World On Line
| | Newsgroups: | it.comp.java |
Ho il seguente software per dos:
Java(tm) Development Kit
JDK(tm) 1.1.1
e ho fatto questo piccolo programma:
class CiaoMondo{
public static void main(String args[]){
system.out.println("Ciao mondo!");
}
}
Quali sono i passi per:
- vedere se ci sono errori
- eseguirlo (magari da solo, non inserito in una pagina)
[R1.14]
| Subject: | Re: AIUTO:come eseguo un programma scritto in Java?
| | Date: | Sat, 26 Dec 1998 17:16:39 +0100
| | From: | "Alex Martelli" <alex@magenta.com>
| | Organization: | None in sight
| | Newsgroups: | it.comp.java |
Supponi di avere una "class pippo" in un file sorgente
pippo.java, e il suo metodo static public main che fa
cio` che desideri.
Avendo scaricato e istallato il Java Developers Kit (JDK)
della Sun, secondo le istruzioni che lo accompagnano (in
particolare, avrai posto nella PATH della tua utenza, Unix
o Windows che sia, il directory degli eseguibili JDK), vai
ad un prompt nel directory dove vive pippo.java (da un
qualsiasi shell in Unix, da un command prompt in Windows)
e scrivi il comando:
javac pippo.java
Questo dovrebbe funzionare (se non hai errori) senza
dire nulla, e creare (verificalo con DIR, o ls) un nuovo
file pippo.class. Adesso, sempre in questo directory,
scrivi il comando:
java pippo
e questo eseguira` il metodo main della classe pippo
tratto dal file pippo.class del directory corrente.
Alex
[D1.15] Riesco a compilare ma non a lanciare
il mio programma! Perche?
[R1.15]
Il problema è il class path, ovvero il percorso che Java usa per trovare le classi necessarie per far funzionare il vostro programma (che includono, ovviamente, quella che avete appena compilato).
Se siete riusciti a compilare senza problemi, significa che il compilatore (javac) è stato lanciato con un classpath corretto. Nel caso pero' stiate usando una IDE o un ambiente integrato, questo non vi aiuta molto, dato che la IDE o l'ambiente integrato avra' fatto per voi il lavoro di definire il classpath corretto.
Il classpath corretto e' necessario anche quando lanciate il programma: altrimenti, otterrete un'eccezione ClassNotFoundException (Java non riesce proprio a trovare la classe che avete indicato) oppure NoClassDefFoundException (la classe che avete indicato viene trovata, ma qualche classe su cui essa dipende no).
Il trucco è (dopo aver letto [R1-14] ed essersi assicurati di non stare scrivendo cose come java MiaClass.class: il nome della classe dev'essere identico a quello che usereste per un import, cioe' senza .class e con punti per identificare i packages) semplicemente assegnare correttamente il classpath. Qui trovate come fare:
1.
Java 1.0.x e 1.1.x (per 1.2, vedi il punto 3. sotto)
richiedono che la variabile d'ambiente CLASSPATH
esista e contenga i paths alle directory contenenti le classi che
componongono il programma che si vuole eseguire.
In alternativa, l'opzione -classpath permette di definire questi path
quando si lancia il programma vero e proprio.
Ad esempio, se
CLASSPATH = c:\jdk1.1.7\lib\classes.zip;c:\mieclassi\;.
indica al programma "java" che la classe che vogliamo far girare si puo'
trovare in c:\jdk1.1.7\lib\classes.zip *oppure* in c:\mieclassi *oppure*
nella directory corrente (.)
2.
Se la classe e' in un package, va usato il nome "fully qualified": se
ad esempio avete definito la classe "MiaApplicazione" nel package
"mie.classi", la COMPILAZIONE avviene (stando nella directory che
contiene MiaApplicazione.java) con
javac MiaApplicazione.java
ma il LANCIO del programma avviene con
java mie.classi.MiaApplicazione
Il CLASSPATH, come in 1., dovra' contenere la directory dove il *package*
e' contenuto.
3.
Le cose cambiano un po' con Java 1.2: le classi vengono cercate prima nel
BOOT CLASS PATH (di cui di solito non dovete preoccuparvi - in ogni caso
sono i files nelle directory di "sistema" di Java, di norma /jre/lib, come
rt.jar e i18n.jar), poi nell'EXTENSION CLASS PATH (di solito la directory
/jre/lib/ext) dove vengono messi i JAR con le estensioni (i package javax);
infine, nell'APPLICATION¨ CLASS PATH, che e' definito da:
- "." per default (il che significa che se le classi sono nella directory corrente
non e' necessario specificare nulla)
- il valore di CLASSPATH (se esiste)
- il valore dato dell'opzione a linea di comando -cp (o -classpath).
- oppure potete specificare un JAR file con -jar (ma TUTTE le classi applicative
devono arrivare da li').
Per maggiori informazioni, vedere
http://java.sun.com/products/jdk/1.2/docs/tooldocs/findingclasses.html
[D1.16] A che servono le interfacce?
[R1.16] [R2.16]
Sto leggendo un libro sul Java che accenna alle interfacce ma
non è molto chiaro.
Cosa sono, a che servono?
come si dichiarano?
[R1.16]
| Subject: | Re: AIUTO: chiarimenti sulle INTERFACCE. |
| Date: | Sat, 2 Jan 1999 21:42:15 +0100 |
| From: | "Alex Martelli" <alex@magenta.com> |
| Organization: | None in sight |
| Newsgroups: | it.comp.java |
Una "interface" si dichiara nella forma:
interface Nome /* ev. "extends AltraInterfaccia */ {
// dichiarazione di costanti e metodi
// NB SOLA dichiarazione, NON implementazione!
};
A parte le costanti, che sono sostanzialmente cosette
"di comodo", una interfaccia e` sostanzialmente un
insieme di _dichiarazioni di metodi_.
Un "codice cliente" puo` ricevere un riferimento ad
una interfaccia (tipicamente come argomento ad un
costruttore o altro metodo), eventualmente salvarselo
in qualche variabile d'istanza, e _usarlo_ -- chiamare
metodi di quella interfaccia -- *senza* preoccuparsi
minimamente di come quei metodi possano essere
stati "implementati".
Una o piu` classi possono poi asserire la clausola
"implements Nome", e sono allora tenute ad avere
implementazioni di tutti i metodi della interfaccia
Nome; in questi casi, un riferimento a una di queste
classi puo` essere passato dovunque sia richiesto
un riferimento all'interfaccia Nome, tipicamente in
"codice cliente" come appena visto.
La programmazione basata su interfacce e` il piu`
puro e produttivo degli approcci al polimorfismo, e
quindi alla programmazione ad oggetti. Grazie ad
essa si "disaccoppia" interamente il "codice
cliente", che usa le interfaccie, dal codice che
implementa le interfacce stesse. I vantaggi (in
termini di "pulizia", manutenibilita`, estensibilita`,
e quindi, alla fin fine, di produttivita` a lungo
termine) sono veramente enormi.
Alex
[R2.16]
| Subject: | Re: Aiuto su java e interfacce |
| Date: | 1999/11/09 |
| From: | "Cristiano Sadun" <crsadun@tin.it> |
| Newsgroups: | it.comp.java |
> Potreste farmi degli esempi di un intelligente utilizzo delle Interfacce
> intelligente?
> Quale e' la differenza fondamentale tra le Interfacce java e le funzioni
> virtuali pure del C++?
Immagino tu abbia gia' chiaro che le interfacce sono un set di metodi dotati
di un nome.
Dal punto di vista del design, le interfacce sono lo strumento per
implementare un "ruolo" nel sistema, che puo' essere assunto da qualunque
classe si sobbarchi l'onere di farlo (e abbiano i requisiti per farlo).
Sobbarcarsi l'onere significa dichiarare "implements", e avere i requisiti
significa possedere i metodi dell'interfaccia.
Una classe astratta e'... una classe astratta :) : qualcosa che, sia dal
punto di vista concettuale, sia da quello del linguaggio, e' una
semi-implementazione che va specializzata, ma che comunque contiene certe
assunzioni e meccanismi in nuce. Usarla, alla C++, per denotare un ruolo
(una classe astratta con tutti metodi puri) e' una forzatura - rispetto allo
stesso concetto di "classe". Oltre ad avere dei problemi di comprensibilita'
(quando una classe e' completamente pura perche' e' un'interfaccia, quando
perche' e' solo pura?) e a livello di linguaggio - e se hai mai provato ad
usare STL insieme a classi derivate, ti sarai reso conto che scocciature si
hanno per riuscire a usare anche solo una semplice list se
BaseClass e' astratta. ;-)
Java separa nettamente le due cose: l'ereditarieta' e' singola (una classe
*e'* un qualcosa ben specifico - e solo quello), ma una classe puo'
implementare tutte le interfacce che vuole (assumendo quindi tutti i ruoli
necessari). Per fare una metafora.. umanistica, e' come dire: Tizio _e'_ un
essere umano, ma di volta in volta _puo' fare_ il vigile urbano, il
guidatore d'auto, il papa', etc. In base alla mia esperienza, il design per
ruoli e classificazione (invece che per classificazione e basta) e'
estremamente piu' efficace - soprattutto in the large - di quello OO
'classico', ed e' poi il filo rosso che sta dietro all'idea stessa di
pattern di design.
E' uno strumento molto efficace per indicare *attivamente* all'utilizzatore
di un certo codice _che cosa si intende_ per un certo elemento del proprio
design - e far si' che il compilatore sia in grado di verificarne l'uso
corretto.
Dal punto di vista del linguaggio, il trucco sta nel fatto che un nome di
interfaccia costituisce *un nome di tipo* a tutti gli effetti: puo' essere
usato in ogni situazione dove puo' essere usato un nome di tipo. Quindi, ad
esempio, e' legale assegnare ad un riferimento il cui tipo e' un'interfaccia
un oggetto la cui classe implementa quell'interfaccia. In altri termini e'
legale scrivere
VigileUrbano vigile = tizio;
o passare 'tizio' ad un metodo dichiarato
public void assegnaControlloreDelTraffico(VigileUrbano vigile);
Come ricorderai, in C++ questo tipo di rapporto si ha solo tra puntatori (o
riferimenti) di classi base a classi derivate (puoi scrivere Base& b=*new
Derivata per esempio) - cose che ovviamente resta anche in java.
Ora resta chiaro che in quanto a potere espressivo finale le due cose sono
equivalenti (in C++, per esempio, se fai una list < auto_ptr<Base> > e un
bel po' d'attenzione riesci a cavartela) ma la leggibilita' e la qualita'
generale dell'implementazione (che consente di traslare direttamente in
linguaggio un costrutto di design, facendosi quindi aiutare dal compilatore)
ne ottiene parecchi vantaggi.
[D1.17] E' vero che Java non ha i puntatori?
| Subject: | [Q] Vettori in C e in java
| | Date: | Tue, 13 Apr 1999 23:05:16 GMT
| | From: | cubass@tin.it
| | Organization: | TIN
| | Newsgroups: | it.comp.java |
Buongiorno a tutti!
Sto iniziando a programmare in java, e mi trovo di fronte ad un
dilemma.
Sto tentando il porting su java di un programma scritto in C, che fa
un forte uso di array allocati dinamicamente e di riferimenti. Mi
chiedo ora se sia possibile utilizzare gli array di java (ma mi sembra
di no, visto che per scelte di progetto i puntatori non esistono)
oppure se sia meglio sfruttare la classe Vector.
Quest'ultima ipotesi mi lascia un po' perplesso per due motivi:
- è una struttura dati esagerata per i miei scopi
- l'implementazione di array a due dimensione mi sembra (ad occhio)
un po' macchinosa
In sostanza, ho il sospetto che la classe Vector vada bene per
collezioni di oggetti, ma male per matrici di reali.
Cosa mi consigliate?
[R1.17]
| Subject: | Re: [Q] Vettori in C e in java
| | Date: | 14 Apr 1999 09:14:50 GMT
| | From: | crsadun@tin.it (Cristiano Sadun)
| | Newsgroups: | it.comp.java |
Attenzione: in java non hai l'*aritmetica* dei puntatori (che percio'
tecnicamente si chiamano riferimenti) ma siccome ogni oggetto e' allocato
dinamicamente in modo esplicito (con una new) e' proprio il contrario -
praticamente hai "solo" puntatori. :)
Un array C/C++ a n dimensioni si traduce immediatamente in Java, e la notazione
e' simile; ad es
int a[10][20]; (statico) o
int **a = malloc(10*sizeof(int *));
for(i=0;i<10;i++) a[i]=malloc(20*sizeof(int));
(dinamico, e poi usi a[x][y])
diventa semplicemente
int a [][] = new int[10][20];
con in piu' check statico e dinamico sui boundaries e proprieta' sulla
lunghezza - in java un array e' un oggetto, non una semplice denotazione per
una zona di memoria.
L'array java e' dinamico, cioe' al posto di 10 e 20 ci possono essere
espressioni qualunque che valutate diano un intero.
>- l'implementazione di array a due dimensione mi sembra (ad occhio)
>un po' macchinosa
Si, decisamente. Se ti servono servizi in piu', puoi dare un'occhiata alla jgl
(java generic library www.objectspace.com) che dispone di numerose collection e
ha una filosofia stile STL.
[D1.18] Come mai clone() non funziona?
| Subject: | Object.clone()
| | Date: | 1999/06/29
| | From: | rzagni@tiscalinet.it (Roberto Zagni)
| | Newsgroups: | it.comp.java |
Per favore potete aiutarmi a capire perchè non
riesco a clonare un
oggetto?
[...]
Mentre l'errore che ricevo è:
QueryData.java:111: Can't access protected method clone in class java.lang.Object. java.util.Set is not a subclass of the current class.
[R1.18]
| Subject: | Re: Object.clone()
| | Date: | 1999/06/29
| | From: | crsadun@tin.it (Cristiano Sadun)
| | Newsgroups: | it.comp.java |
Be', scusa, il messaggio d'errore e' chiaro:
clone() e' un metodo protetto e quindi puo'
essere invocato solo da una classe derivata.
Ora, la cosa e' effettivamente poco intuitiva. Ci
sono un po' di ragioni per questo design, alcune
buone e alcune cattive, ma la situazione e'
questa - e "Cloneable" non e' propriamente al
centro delle attenzioni del team di design di
Javasoft, credo.. :) comunque un workaround
"pulito" e'
public class C implements Cloneable {
public C createCopy() {
try { return clone(); } catch (Exception e) { return null; }
}
}
e usi
C obj = new C();
...
C clonedObj = obj.createCopy();
[D1.19] Cosè una servlet? Come si sviluppa?
| Subject: | Servlet?
| | Date: | 1999/07/16
| | From: | danambro@tin.it (Ambroset Daniele)
| | Newsgroups: | it.comp.java |
Una domanda banale...per me non proprio.
Le servlet dovrebbero essere dei programmini che girano all'interno di una directory del server, come dei cgi soltanto 100% java.
Se ho ben capito per far girare questo programmino c'è bisogno di un altro programma web server che faccia da ponte ed installato sul server.....(più o meno come per un accesso ad un data base da parte di un'applet). La mia domanda è:
devo scaricarmi il programma ponte per poi installarlo nel server dove mettero' la servlet, oppure i server (ad esempio della tin) hanno già una directory specifica??
Il servlet è un programma semplicissimo in Java?? ha bisogno di qualche accortezza nel passare i dati e nel costruirlo?
Ho capito qualche cosa sulle servlet o sono completamente fuori strada??
[R1.19]
| Subject: | Re: Servlet?
| | Date: | 1999/07/19
| | From: | tarquini@arcaweb.it (Massimiliano Tarquini)
| | Newsgroups: | it.comp.java |
L'idea è sicuramente quella giusta, con qualche differenza:
servlet girano come threads all'interno di una Java Virtual Machine e a differenza dei cgi che hanno un ciclo vitale del tipo:
->Carica il Cgi
->Esegui il Cgi
->Rimuovi Cgi dalla memoria
ad ogni richiesta, [mentre] le servlet java una volta in esecuzione non muoiono mai, rimangono
caricate in memoria consentendo un aumento notevole nella velocità di esecuzione.
Che io sappia in italia non esistono server che offrono spazi web con la possibilità di
gestire servlet, per il resto la situazione allo stato attuale è la seguente:
IIS4 : non gestisce servlet
Netscape Web Server 3.5 gestisce servlet, ma usa la versione 1
Apache ha già dei moduli di gestione, ed in futuro verrà fuso con Java WebServer.
Comunque comunque io ti consiglio di usare il server della w3c "JigSaw"
Puoi trovare tutta la documentazione sul sito della sun
http://java.sun.com/products/
(Cercate "Java Servlet Development Kit" o JSDK -cris)
[D1.20] Esistono motori servlet free?
[R1.20.0]
[R1.20.1]
[R1.20.2]
[R1.20.3]
[R1.20.0]
Una lista completa di motori servlet free si trova a
http://directory.google.com/Top/Computers/Software/Internet/Servers/Application/Java_Servlet/ [thx. Castagna]
Tomcat (un modulo aggiuntivo per Apache, server http open software) è la scelta di Sun - a cui ha anche demandato lo sviluppo successivo delle Servlet API.
[R1.20.1]
| Subject: | Servlet? |
| Date: | 1999/01/15 |
| From: | danambro@tin.it (Ambroset Daniele) |
| Newsgroups: | it.comp.java |
Ciao
Si, prova il JRun al sito http://www.livesoftware.com/
io lo uso e mi sembra buono.
[R1.20.2]
| Subject: | Re: Help - Servlet Engine |
| Date: | Tue, 05 Oct 1999 18:15:14 +0200 |
| From: | GL |
| Newsgroups: | it.comp.java |
A mio modo di vedere il migliore (+ performante) e' JigSaw...
del consorzio W3C.
Lo trovi su www.w3c.org.
[R1.20.3]
| Subject: | Re: [FAQ] it.comp.java v0.9d |
| Date: | Tue, 6 Jun 2000 13:02:55 +0200 |
| From: | "Roberto Corda" |
| Newsgroups: | it.comp.java |
Segnalo anche tomcat come motore servlet free
e per di piu' open-source, che puo essere trovato su http://jakarta.apache.org
[D1.21] Si può realizzare una CGI in Java?
| Subject: | Java CGI
| | Date: | 1998/07/03
| | From: | bass0033@mailbox.iunet.it (Claudio Carli)
| | Newsgroups: | it.comp.java |
Salve a tutti,
vorrei sapere se e' possibile realizzare un CGI in Java.
Vorrei realizzare un piccolo programmino che, richiamato da un
pulsante di un form contenuto in una pagina html, acquisisca i valori
contenuti in alcuni campi del form e li scriva in un file di testo sul
server.
Tenete presente che il server non lo gestisco io, per cui non posso
compiere operazioni di amministrazione sullo stesso. Ho solo
acquistato uno spazio nel quale posso saricare le mie pagine ed i miei
CGI.
[R1.21]
| Subject: | Re: Java CGI
| | Date: | 1998/08/03
| | From: | albero@my-dejanews.com
| | Newsgroups: | it.comp.java |
Io ti consiglierei di usare le servlet ... e' pero' necessario che sul server sia installato il JSDK (Java Servlet Development Kit) che si trova facilmente in rete e anche un programma di amministrazione come ad esempio il JRUN Administrator scaricabile anch'esso da Internet.
[D1.22] Come faccio a riconoscere il sistema operativo?
Come faccio a sapere su che sistema operativo sta girando la mia applicazione/applet?
[R1.22]
La proprietà "os.name" contiene una denotazione specifica per ciascun sistema operativo (ad es. "Windows NT", "Solaris", etc). Cfr. [D2.0.1].
[D1.23] Come faccio ad esegure un programma esterno? [R1.23a] [R1.23b]
| Subject: | Eseguire applicazioni esterne
| | Date: | 1998/09/14
| | From: | Stefano Andreani
| Newsgroups: | it.comp.java |
|
Vorrei sapere come fare per richiamare l'esecuzione di un'applicazione (java o no) all'interno di un'applicazione java e (1) attenderne l'esecuzione, oppure (2) lasciarla in background.
[R1.23]
| Subject: | Re: Eseguire applicazioni esterne
| | Date: | 1998/09/14
| | From: | Alex Martelli
| Newsgroups: | it.comp.java |
|
Anzitutto:
Runtime rt = Runtime.getRuntime();
ti ritorna un riferimento all'oggetto Runtime associato alla tua application. L'oggetto Runtime ha vari overload del metodo exec(), che ti ritornano un oggetto Process:
Process figlio = rt.exec("pippo.exe e suoi argomenti");
Se ignori completamente l'oggetto Process, il processo figlio continua ad eseguire per conto suo (il tuo caso [2]). Se vuoi aspettare che il processo figlio termini, chiama sull'oggetto Process il metodo waitFor: tornera' immediatamente se il processo figlio e' gia' finito, se no blocchera' il thread chiamante (la tua intera applicazione, se quello e' il suo unico thread) sino alla terminazione del processo figlio. Per intenderci,
int rc = figlio.waitFor();
L'intero ritornato e' il codice di uscita del processo figlio.
Ciascuna di queste chiamate puo` naturalmente generare opportune eccezioni che occorrera' gestire con try/catch, ovvero propagare dal metodo che le chiama.
[R1.23b] (Esempio da castagna@****.it]
---------------------------------------------------[ Runner.java ]---
/*
Runner - Demo of using java.lang.Runtime class
Java Code by Castagna
Semplicissimo esempio che mostra l'uso della classe java.lang.Runtime
Ringrazio Massimo "il pelandrone" di news:it.comp.java
*/
import java.lang.Runtime;
import java.io.IOException;
public class Runner {
public static void main (String args[]) {
Runtime r = java.lang.Runtime.getRuntime();
try {
String[] strArray = new String[2];
strArray[0]="start.exe"; // nome del processo da lanciare
strArray[1]="musica.mp3"; // parametri da linea di comando...
Process p = r.exec (strArray); // esegue il processo
}
catch (IOException e) {
System.err.println ("Error on exec method call.");
System.exit(1);
}
System.exit(0);
} // main
} // Runner
----------------------------------------------------[ Runner.java ]---
[D1.24] Dov'e' classes.zip nel JDK1.2? (o 2, o 1.3 etc)
[R1.24]
Nelle versioni successive alla 1.1, l'ambiente di sviluppo (il JDK, Java Development Kit, che comprende il compilatore, il debugger, etc) è nettamente distinto dall'ambiente di esecuzione (JRE, Java Runtime Environment, che comprende le librerie standard, la JVM, etc). Infatti quando installate il JDK vi vengono installati entrambi.
L'architettura del JRE divide le classi da "trovare" in:
- standard: quelle che erano in classes.zip e ora sono in <$JRE_HOME>/lib/rt.jar e frattaglie varie (dove <$JRE_HOME> è la directory dove è installato il JRE);
- estensioni: ad esempio JavaMail, JavaComm, etc - librerie ed estensioni di terze parti, che sono contenute in file JAR in <$JRE_HOME>/lib/ext;
- classi applicative: la vostra applicazione
Notate che è cambiato anche il meccanismo di caricamento delle classi: non si ha più un solo ClassLoader che legge la variabile d'ambiente CLASSPATH, ma diversi: in sequenza, le classi vengono cercate tra quelle standard, tra le estensioni ed infine tra le classi applicative.
Ulteriori informazioni a http://java.sun.com/products//jdk/1.2/docs/tooldocs/solaris/migration.html#clspath.
Al posto di CLASSPATH, il modo più efficace di lanciare le vostre applicazioni è di specificare il path delle vostre classi applicative usando l'opzione -cp nella linea di comando (win32):
java -cp c:\app_class com.mieclassi.Pippo
farà sì che la classe Pippo (nel package com.mieclassi, e quindi nel path relativo com\mieclassi\Pippo.class) venga cercata in c:\app_class (e quindi trovata al path assoluto c:\app_class\com\mieclassi\Pippo.class).
Notate che non è necessario specificare il path nè delle classi standard nè delle extensions che vengono cercate automaticamente.
[D1.25] Si puo' accedere alla porta seriale? Come si fa?
| Subject: | come accedere alle COM?
| | Date: | 1999/08/01
| | From: | Nicola Vicino
| Newsgroups: | it.comp.java |
|
Ciao a tutti,
qualcuno sa` come accedere alle porte seriali da Java?
E se porto il programma da win a linux come faccio?
Grazie in anticipo, Nick
[R1.25]
| Subject: | Re: come accedere alle COM?
| | Date: | 1999/08/02
| | From: | Carlo Emanuele Demontis
| Newsgroups: | it.comp.java |
|
Sul sito della SUN sono disponibili le COMM, le API per la gestione delle porte seriali e parallele in Java. Vi e' anche l'implementazione per Sun solaris e windows, ma credo che vi si trovino anche le
implementazioni per Linux, anche se non sono sicuro.
tieni presente che in Linux, essendo uno Unix piu' che completo, probabilmente ti puoi limitare ad aprire un file col nome della porta seriale, esattamente come faresti con un altro linguaggio. comunque, per il bene della portabilita', scarica le COMM e usa quelle.
[D1.26] Gulp!getenv() è stato deprecato! Che faccio?
[R1.26]
Vedi [R1.27].
[D1.27] Come faccio ad accedere alle variabili d'ambiente?
| Subject: | Variabili di ambiente ??
| | Date: | Tue, 26 Oct 1999 18:11:49 GMT
| | From: | bardellia@tiscalinet.it (AlessandroBardelli)
| | Newsgroups: | it.comp.java |
Come si fà ad accedere alle variabili di ambiente : sotto windows
quelle settate in autoexec , tipo classpath , tanto per interdersi ,
su piattaforma Linux quelle definite con l'EXPORT ....??
Forse con System..etc.etc. , se si , posso accdere anche alle
variabili settate da me , tipo PIPPOPATH ??:-) e come ??
[R1.27]
A parte quanto scritto sotto, la classe org.sadun.util.EnvironmentVariables (parte delle mie classi di utilità) può fare al caso vostro - a patto di effettuare modifiche minori (mandatemi pure una mail in proposito se vi serve).
| Subject: | Re: Variabili di ambiente ??
| | Date: | Wed, 27 Oct 1999 07:44:26 GMT
| | From: | Cristiano Sadun
| Newsgroups: | it.comp.java |
|
No - da Java 1.1 l'accesso alle variabili d'ambiente e' deprecato - dato che e'
intrinsecamente non portabile (in certi s/o non esistono proprio).
Il trucco e' passare le variabili d'ambiente sulla linea di comando, usando -D:
ad esempio, se hai PIPPOPATH puoi scrivere
java -Dpippo.path=$PIPPOPATH Applicazione
(o java -Dpippo.path=%PIPPOPATH Applicazione in Win32)
e nelle proprieta' di sistema (cfr. System.getProperties()) ti troverai un bel
"pippo.path" col valore di PIPPOPATH.
[D1.28] Swing, come farle funzionare con i browser?
| Subject: | [SWING] - come farle funzionare?
| | Date: | Fri, 05 Nov 1999 23:01:40 GMT
| | From: | "Davide Piras"
| Newsgroups: | it.comp.java |
|
Ciao, immagino sia una domanda da FAQ...
Come diavolo faccio a visualizzare le swing in Internet Explorer 5??
ho fatto un Japplet che con appletviewer funziona benissimo ma, sullo stesso
HTML, Internet Explorer dice class not found...
p.s. Uso Windows NT
[R1.28]
| Subject: | Re: [SWING] - come farle funzionare?
| | Date: | Sat, 06 Nov 1999 08:41:31 GMT
| | From: | "Scorpio"
| Newsgroups: | it.comp.java |
|
Devi utilizzare i Plug-In , perchè le classi Swing non sono implementate in
IE5.
Cerca sul sito di Sun per il codice Html da inserire sulla pagina che
contiene l'applet per richiamare i suddetti plug-in di supporto.
(Il plug-in si trova a http://java.sun.com/products/plugin/index.html [CS])
[D1.29]
Ho Windows 98 e il cursore del mouse mi pasticcia lo schermo!
| Subject: | Problemi di refresh sul puntatore del mouse
| | Date: | Thu, 11 Nov 1999 16:09:16 +0100
| | From: | "Roal Zanazzi"
| Newsgroups: | it.comp.java |
|
Ho [...] PC con Windows 98, mouse e tastiera radio della Logitech.
Riscontro pero' un problema di "refresh" sul rettangolo che contiene il
puntatore del mouse; in pratica quando sposto il mouse dopo un click, nel
rettangolo suddetto rimane l'immagine che compariva _prima_ di eseguire il
click.
[R1.29]
| Subject: | Re: Problemi di refresh sul puntatore del mouse!
| | Date: | Sun, 14 Nov 1999 17:40:09 +0100
| | From: | "Gabriele Biarese"
| Newsgroups: | it.comp.java |
|
Avevo anch'io lo stesso problema con Win98 pur senza aver installato il
Microsoft Plus.
Ho fatto vari tentativi anche per quanto riguarda il driver della scheda
video, il numero dei colori visualizzati e la frequenza di refresh.
Alla fine ho trovato la soluzione: è stato sufficiente andare nel pannello
di controllo > mouse > puntatori e impostare la combinazione su "nessuno" o
"windows standard".
In effetti a quanto pare l'emulazione software dei cursori viene fatta anche
senza il Plus installato, è sufficiente che si scelga una combinazione di
cursori animati o 3D.
[Road ha poi riferito che il problema e' probabilmente imputabile al driver del suo mouse Logitech -cris]
[D1.30]
C'è un editor che...
[R1.30]
Vedi [D4.3.1] nella [SEZ4].
[D1.31]
Lavorando a caratteri, come posso fare un clrscr? (pulire lo schermo?)
Come si fa a pulire lo schermo di un'applicazione Java che non fa uso di GUI (Graphical User Interface)?
[R1.31]
Vedi [D2.0.2] per le caratteristiche di console di Java.
[D1.32]
Posso scrivere a colori sulla "console" di Java?
È possible/come si fa a scrivere a colori sullo schermo di console di un'applicazione Java che non fa uso di GUI (Graphical User Interface)?
[R1.32]
Vedi [D2.0.2] per le caratteristiche di console di Java.
[D1.33]
Come faccio a posizionare il cursore dove voglio sulla console?
È possible/come si fa a posizionare il cursore sullo schermo di console di un'applicazione Java che non fa uso di GUI (Graphical User Interface)?
[R1.33]
Vedi [D2.0.2] per le caratteristiche di console di Java.
[D1.34]
C'è qualcosa di simile alla conio.h del C per controllare lo schermo a caratteri?
Usando il c, con conio.h potevo contrallare posizionamento e colori dello schermo! Come faccio in Java?
[R1.34]
Vedi [D2.0.2] per le caratteristiche di console di Java.
[D1.35]
Come si mettono le virgolette (") in una stringa?
[R1.35]
Usa la sequenza \". Ad esempio, per visualizzare "Pippo", lo statement è
System.out.println("\"Pippo\"");
[D1.36]
Ho un errore Unable to initialize threads: cannot find class java/lang/Thread! Cos'è?
[R1.36]
La JVM di Jdk1.1.x (java.exe) mantiene le classi "di sistema" (ad esempio, java.lang.String, java.util.Vector) in un file, chiamato classes.zip, che normalmente si trova in JDK/lib/classes.zip (dove JDK è la directory dove avete installato il jdk).
Questo file dev'essere in CLASSPATH (vedi [R1.15]).
Se la JVM non è di trovare classes.zip, non può nemmeno partire, dato che la classe java.lang.Thread non può essere trovata.
JDK/JRE1.2 (aka Java 2) risolve questo problema usando una locazione fissa (di solito JRE_HOME/lib/rt.jar se il JRE (java runtime environment) è stato installato in /JRE, per cui non è più necessario che l'utente includa classes.zip nel suo classpath.
In conclusione, se usate JDK1.1 e avete una definizione esplicita di CLASSPATH, questa deve includere classes.zip: ad esempio, Win32 per compilare su JDK1.1.8 avrete qualcosa del tipo:
CLASSPATH=c:\jdk1.1.8\lib\classes.zip;c:\classes;.
[D1.37]
Nello stack trace di un'eccezione c'è scritto "compiled code"!
| Subject: | Exception stackTrace
| | Date: | Tue, 13 Jun 2000 09:40:25 GMT
| | From: | Marco Azzalini
| Newsgroups: | it.comp.java |
|
Ciao a tutti, qualcuno sa dirmi perchè a volte nello stack trace di una
eccezione anzichè della riga del sorgente c'è un banale:
compiled code?
Mi capita che lo stesso programma genera eccezioni che a volte riportano
la linea del codice srogente altre volte si "rifugiano" dietro l'inutile
"compiled code"
[R1.37]
| Subject: | Re: Exception stackTrace
| | Date: | Wed, 14 Jun 2000 07:36:15 GMT
| | From: | Bruno Bossola
| Newsgroups: | it.comp.java |
|
Perche' il codice e' compilato ;-) dal just-in-time compiler a runtime!
Lancia la VM con il parametro -nojit, in modo da disabilitare il just
in time compiler nelle fasi in cui fai test .
[D1.38]
Si può usare RMI in Internet Explorer?
[R1.38]
Vedi [D2.6.1]
[D1.38]
RMI funziona in AppletViewer ma non in Internet Explorer!
[R1.39]
Vedi [D2.6.1]
[D1.40]
Usando RMI con Internet Explorer ho un'eccezione ClassNotFoundException!
[R1.40]
Vedi [D2.6.1]
[D1.41]
È possible accedere ad un database Access (od ODBC) da un'applet?
[R1.41]
(Cfr. anche [D2.2.2]) Per quanto riguarda un database ODBC, in IE5 l'uso del bridge jdbc-odbc (che richiede il caricamento di una DLL locale)
non è permesso ad un'applet non firmata (cfr. [D2.4.1]). Siccome generalmente si accede
ad |