Tom's Guide > Forum > Programmation > Gestion des liens pour mon navigateur Java

Gestion des liens pour mon navigateur Java

Forum Programmation : Gestion des liens pour mon navigateur Java

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour.

J'ai developpé un petit navigateur web en java, sauf que je n'arrive pas à gérer les liens. Voici mon code:

Citation :


import javax.swing.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.lang.*;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLFrameHyperlinkEvent;

public class Connec1 implements ActionListener, MouseListener
{
JTextField tf1,tf2;
JButton b1,b2,bQ;
JFrame f;
JPanel p,p1;
JLabel l1,l2;
JTextArea txt1;
JEditorPane html;
String path = "http://www.google.fr/";

public Connec1()
{
f = new JFrame("Affiche" );
p = new JPanel();
p1=new JPanel();
tf1 = new JTextField(30);
tf2 = new JTextField(10);
b1 = new JButton("Envoyer" );
b2 = new JButton("Effacer" );
bQ = new JButton("Quitter" );
l1 = new JLabel("URL:" );
l2 = new JLabel("port:" );
txt1 = new JTextArea(20,100);

f.add(p);
p.add(l1);
p.add(tf1);
p.add(l2);
p.add(tf2);
p.add(b1);
p.add(b2);
p.add(bQ);

f.setSize(1000,550);
p1.setSize(900,400);
f.show();

b1.addActionListener(this);
b2.addActionListener(this);
bQ.addActionListener(this);
p.addMouseListener(this);
}

public static void main(String toto[])
{
new Connec1();

}
public void actionPerformed(ActionEvent toto)
{
if (toto.getSource()==bQ)
{
System.exit(0);
}
else if (toto.getSource()==b1)
{
try
{
URL url1=new URL(tf1.getText());
DataInputStream dis = new DataInputStream(url1.openStream());
String inputLine;
JEditorPane html = new JEditorPane( url1 );
html.setEditable(false); // empèche de pouvoir modifier des choses sur la page.
html.addHyperlinkListener( createHyperLinkListener() );
html.setBounds( 0, 0, 500, 500 );
JScrollPane scroller = new JScrollPane();
JViewport vp = scroller.getViewport();
// while ((inputLine = dis.readLine()) != null)
// {
vp.add( html );
p1.removeAll();
p1.add(vp);
p.add(p1);
// }
}
catch (IOException ioe)
{
System.out.println("IOException: " + ioe);
}
}
else if (toto.getSource()==b2)
{
tf1.setText("" );
txt1.setText("" );
tf2.setText("" );
p.remove(p1);
}
}
public void mouseClicked(MouseEvent toto)
{
}
public void mouseEntered(MouseEvent toto)
{
}
public void mouseExited(MouseEvent toto)
{
}
public void mousePressed(MouseEvent toto)
{
}
public void mouseReleased(MouseEvent toto)
{
}

private HyperlinkListener createHyperLinkListener()
{
return new HyperlinkListener()
{
public void hyperlinkUpdate(HyperlinkEvent e)
{
if ( e.getEventType() == HyperlinkEvent.EventType.ACTIVATED )
{
if (e instanceof HTMLFrameHyperlinkEvent)
{
//((HTMLDocument) html.getDocument()).processHTMLFrameHyperlinkEvent((HTMLFrameHyperlinkEvent) e);
}
else
{
try
{
path = e.getURL().getPath();
html.setPage( e.getURL() );
tf2.setText(path);
}
catch (IOException ioe)
{
System.out.println("IOE: " + ioe);
}
}
}
}
};
}

}



Si vous avez d'autres remarques concernant mon code, n'hésitez pas...

Merci d'avance.

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Et qu'est-ce qui ne marche pas ?
(HyperlinkListener:hyperlinkUpdate est bien appelé ? dans quelles méthodes ça rentre et ça ne rentre pas ?)

Répondre à CRicky

Au début, tu crées une réference "html" vers un objet JEditorPane qui est null.

Code :
  1. JEditorPane html;



Et plus loin (dans le corps d'une méthode, et dans un bloc try en plus), tu crées une nouvelle réference vers un JEditorPane, qui s'appelle aussi html.

Code :
  1. JEditorPane html = new JEditorPane( url1 );


En dehors du bloc try, cette réference n'existe pas.

Donc on peut s'attendre à ce que

Code :
  1. html.setPage( e.getURL() );


renvoie une NullPointerException, ce qui est le cas (tu aurais du le préciser).

En remplaçant JEditorPane html = new JEditorPane( url1 ); par:
html = new JEditorPane(url1);
Tu n'auras pas cette erreur.

Par contre, si tu veux afficher l'addresse complète dans la barre d'adresse il faut utiliser: path = e.getURL().toString();
Parce que getPath() ça te donnera quelque chose comme "/forum". Rien sur l'hôte.

Ca ne sert pas à grand chose de demander le port à l'utilisateur puisque les serveurs HTTP écoutent sur le port 80. D'autant plus que tu ne l'utilises pas.
Tu crées aussi une chaîne qui contient l'adresse de Google, j'imagine que c'est pour en faire la page par défaut. Mais à aucun moment tu ne l'utilises. Pourtant tu as juste à remplacer:
tf1 = new JTextField(30)
par: tf1 = new JTextField(path,30)

Remplace f.show() par f.setVisible(true).

Et sinon, tu peux aussi implémenter HyperlinkListener (comme tu le fais pour ActionListener et MouseListener), utiliser addHyperlinkListener(this) et redéfinir la méthode hyperlinkUpdate dans ta classe.

Répondre à aik

Merci pour votre aide. Ca fonctionne maintenant. En fait je demande le port car il faut que j'essaye de me connecter aux ftp.

Répondre à _F_X_

_F_X_ a écrit :

Merci pour votre aide. Ca fonctionne maintenant. En fait je demande le port car il faut que j'essaye de me connecter aux ftp.



Le protocole est indiqué dans l'URL.
D'ailleurs, la classe URL de java contient la méthode getProtocol(). Une fois que tu as le protocole, tu peux en déduire le port que le serveur écoute.

En plus, tu te connectes sans utiliser le port.

Répondre à aik

ftp:// login : password @ site : port/...


Message édité par CRicky le 11-11-2006 à 15:18:56
Répondre à CRicky
Tom's Guide > Forum > Programmation > Gestion des liens pour mon navigateur Java
Aller à :

Il y a 356 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens