Votre question

Gestion des liens pour mon navigateur Java

Tags :
  • Swing
  • Programmation
Dernière réponse : dans Programmation
31 Octobre 2006 22:59:19

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.

Autres pages sur : gestion liens navigateur java

a b L Programmation
1 Novembre 2006 10:49:45

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

Au début, tu crées une réference "html" vers un objet JEditorPane qui est null.
  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.
  1. JEditorPane html = new JEditorPane( url1 );

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

Donc on peut s'attendre à ce que
  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.
Contenus similaires
10 Novembre 2006 17:26:13

Merci pour votre aide. Ca fonctionne maintenant. En fait je demande le port car il faut que j'essaye de me connecter aux ftp.
10 Novembre 2006 18:06:51

_F_X_ a dit :
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.
a b L Programmation
11 Novembre 2006 15:16:43

ftp:// login : password @ site : port/...
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS