Я пытаюсь сделать веб-браузер для удовольствия, я, кажется, получаю ошибки, когда когда-либо loadHtml
в свой метод loadHtml
, когда я прокомментирую, что все работает даже с прослушивателем действий.
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
import java.applet.*;
public class browserPannel extends JFrame{
public static void main(String[] arg) {
JFrame browser = new JFrame("A Nun In A Weelchair");
browser.setSize(1000,700);
browser.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
browser.setLocationRelativeTo(null);
JPanel header = new JPanel();
header.setBackground(Color.lightGray);
JTextField url = new JTextField(20);
url.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
//loadHtml(event.getActionCommand);
System.out.println("action performed");
}
}
);
url.setSize(890,30);
url.setVisible(true);
JButton send = new JButton("Send");
send.setSize(75,30);
send.setVisible(true);
JEditorPane htmlc = new JEditorPane();
htmlc.setBackground(Color.red);
htmlc.setEditable(true);
htmlc.setContentType("text/html");
header.add(url, BorderLayout.SOUTH);
header.add(send);
browser.getContentPane().add(header, BorderLayout.NORTH);
browser.getContentPane().add(new JScrollPane(htmlc));
browser.pack();
browser.setVisible(true);
}
private void loadHtml(String link)
{
try{
//htmlc.setPage(link);
//url.setText(link);
}catch(Exception e){
System.out.println("ops sorry could not fined Virgine Mobile");
}
}
}
из того, что я могу сказать, похоже, что он не может распознать url
и htmlc
Я попытался прокомментировать htmlc.setPage
и url.setText
, и когда я делаю это, моя программа компилируется. почему я получаю эти ошибки, не следует ли признать, что они определены выше?
Ваш метод не является static
но вы пытаетесь вызвать его из static
контекста (main()
). Кроме того, ваши экземпляры в методе main()
не видны в loadHtml()
. Вы можете передать их в метод (или объявить их как static
поля в своем классе). Наконец, вы не должны проглатывать Exception
(по крайней мере printStackTrace()
). Поэтому я думаю, что вы искали что-то вроде,
private static void loadHtml(JEditorPane htmlc, JTextField url, String link) {
try{
htmlc.setPage(link);
url.setText(link);
}catch(Exception e){
System.out.println("ops sorry could not find Virgin Mobile");
e.printStackTrace();
}
}
Кроме того, loadHtml(event.getActionCommand);
неверно. Вам понадобится скобка для вызова исходного метода loadHtml(event.getActionCommand());
, но с вышеуказанными изменениями это будет loadHtml(htmlc, url, event.getActionCommand());
(и для использования htmlc
и url
в вашем внутреннем классе вы должны объявить эти ссылки final
. Например, final JTextField url = new JTextField(20);
).
В качестве альтернативы вы можете сделать компоненты static
чтобы они были доступны для всех экземпляров (и методы - сначала прокомментируйте их в своем main
методе) -
private static final JTextField url = new JTextField(20);
private static final JEditorPane htmlc = new JEditorPane();
private static void loadHtml(String link) {
try{
htmlc.setPage(link);
url.setText(link);
}catch(Exception e){
System.out.println("ops sorry could not find Virgin Mobile");
e.printStackTrace();
}
}
Затем вы должны иметь возможность использовать loadHtml(event.getActionCommand())
catch
иначе программа вылетает