Se connecter avec
S'enregistrer | Connectez-vous

Gestion des liens pour mon navigateur Java

Dernière réponse : dans Programmation

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

Lassé par la pub ? Créez un compte

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.

_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.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde