如何在没有JEditor的情况下制作Java Web浏览器?

如何在没有JEditor的情况下制作Java Web浏览器?,java,Java,我对Java还是相当陌生,对于我的班级来说,我们必须制作一个没有JEditor的web浏览器。我只需要弄清楚当用户在JTextField中键入时如何使用套接字,然后将其转到该网站。此外,我只应该使用http://而不是https://如果这有区别的话。什么都行!谢谢 import javax.swing.*; import java.awt.*; import javax.swing.JButton; import java.awt.GridLayout; import java.awt

我对Java还是相当陌生,对于我的班级来说,我们必须制作一个没有JEditor的web浏览器。我只需要弄清楚当用户在JTextField中键入时如何使用套接字,然后将其转到该网站。此外,我只应该使用http://而不是https://如果这有区别的话。什么都行!谢谢

    import javax.swing.*;
import java.awt.*;
import javax.swing.JButton;
import java.awt.GridLayout;
import java.awt.event.*;
import java.net.InetAddress;
import java.net.Socket;
import java.io.*;
public class WebPanel extends JPanel{
PrintWriter pw;
JTextField text = new JTextField("http://www.");

public WebPanel(){

 //trying to connect to the website 
    try {
     Socket s = new Socket(text, 80); //<<<---where the error is thrown
     OutputStream os = s.getOutputStream();
     pw = new PrintWriter(os, true);
     pw.flush();
  } catch (Exception e) {
    e.printStackTrace();
  }
    //set layout
    setLayout(null);

    ButtonHandler bh = new ButtonHandler();

   text.addActionListener(bh);
   text.setBounds(185, 10, 315, 25);
   add(text);

    //buttons 
    JButton goButton = new JButton("GO");
    goButton.addActionListener(bh);
    add(goButton);
    goButton.setBounds(500, 10, 75, 25);

    JButton backButton = new JButton("BACK");
    backButton.addActionListener(bh);
    add(backButton);
    backButton.setBounds(2, 10, 75, 25);
    JButton forwardButton = new JButton("FORWARD");
    forwardButton.addActionListener(bh);
    add(forwardButton);
    forwardButton.setBounds(80, 10, 100, 25);
    }
     public class ButtonHandler implements ActionListener{
        public void actionPerformed(ActionEvent e){
     //buttons for later
        if(e.getActionCommand().equals("GO")){
            String input = text.getText();
            System.out.println("You searched for: " + input);
            pw.flush();
        }else if(e.getActionCommand().equals("BACK")){
            System.out.println("you pressed the back button");
            pw.flush();
        } else if(e.getActionCommand().equals("FORWARD")){
            System.out.println("You pressed the forward button");
            pw.flush();
        }
    }

    }
    }
    }
import javax.swing.*;
导入java.awt.*;
导入javax.swing.JButton;
导入java.awt.GridLayout;
导入java.awt.event.*;
导入java.net.InetAddress;
导入java.net.Socket;
导入java.io.*;
公共类WebPanel扩展了JPanel{
印刷作家;
JTextField text=新的JTextField(“http://www.");
公共网页{
//正在尝试连接到网站
试一试{

Socket s=新套接字(文本,80);//对于简单的情况,您不需要使用套接字。您可以像这样使用URL类:

import java.io.InputStream;
import java.net.URL;
import org.apache.commons.io.IOUtils;

public class URLReadTest {
    public static void main(String[] args) throws Exception {
        InputStream is =  new URL("http://stackoverflow.com/").openStream();
        String html = IOUtils.toString(is);
        is.close();
        System.out.println(html);  // Parse HTML here
    }
}

然后,您必须自己解析返回的HTML,然后才能将其可视化。

对于简单的情况,您不需要使用套接字。您可以使用如下URL类:

import java.io.InputStream;
import java.net.URL;
import org.apache.commons.io.IOUtils;

public class URLReadTest {
    public static void main(String[] args) throws Exception {
        InputStream is =  new URL("http://stackoverflow.com/").openStream();
        String html = IOUtils.toString(is);
        is.close();
        System.out.println(html);  // Parse HTML here
    }
}

当然,你必须自己解析返回的HTML,然后才能将其可视化。

你的问题太宽泛了,就像问工程师“如何制造汽车?”。将您的问题分解为多个部分。获取用户输入。发出HTTP请求。显示页面。是否有效?您在哪里遇到问题?共享您目前正在使用的一些代码,或您正在尝试使用的一段代码。如果您可以发布更具体的问题,其他人将更容易提供帮助。我更新了它,t感谢您的帮助!那么为什么您要将JTextField的变量放入套接字构造函数中,而不是使用
text.getText()
?另一件事是,当您使用套接字时,您不能使用您在
JTextField
中定义的URL(我的意思是“http://...")。在套接字中定义主机名和端口。没有协议,没有相对的资源路径。所有这些都应该通过写入套接字本身来提供。你的问题太广泛了。这就像问工程师“如何制造汽车?”。将您的问题分解为多个部分。获取用户输入。发出HTTP请求。显示页面。是否有效?您在哪里遇到问题?共享您目前正在使用的一些代码,或您正在尝试使用的一段代码。如果您可以发布更具体的问题,其他人将更容易提供帮助。我更新了它,t感谢您的帮助!那么为什么您要将JTextField的变量放入套接字构造函数中,而不是使用
text.getText()
?另一件事是,当您使用套接字时,您不能使用您在
JTextField
中定义的URL(我的意思是“http://...")。在套接字中定义主机名和端口。无协议,无相对资源路径。所有这些都应通过写入套接字本身来提供。