Java 为什么打开网页的按钮只有在第一次点击时才起作用,然后被停用?

Java 为什么打开网页的按钮只有在第一次点击时才起作用,然后被停用?,java,swing,url,jbutton,Java,Swing,Url,Jbutton,我有一套JButton,每个按钮都会打开一个单独的YouTube视频网页。当我第一次运行这个程序时,我可以点击任何一个按钮并获得视频页面。当我试图通过点击按钮获得另一个视频页面时,它不起作用——事实上,所有按钮都被禁用。无论我是否关闭视频网页,情况都是如此 如何保持所有按钮处于激活状态?提前谢谢 这是代码供参考。按钮链接和标记从文本文件填充 //import statements public class VideoRecord extends JFrame { private File v

我有一套JButton,每个按钮都会打开一个单独的YouTube视频网页。当我第一次运行这个程序时,我可以点击任何一个按钮并获得视频页面。当我试图通过点击按钮获得另一个视频页面时,它不起作用——事实上,所有按钮都被禁用。无论我是否关闭视频网页,情况都是如此

如何保持所有按钮处于激活状态?提前谢谢

这是代码供参考。按钮链接和标记从文本文件填充

//import statements

public class VideoRecord extends JFrame {

private File videoRecordFile;

public VideoRecord() throws FileNotFoundException {
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(new GridLayout(2,2));
    setSize(new Dimension(500, 500));
    videoRecordFile = new File("videorecord.txt");      
    getButtons();
    pack();
}

public void getButtons() throws FileNotFoundException {
    Scanner input = new Scanner(videoRecordFile);
    while (input.hasNextLine()) {
        Scanner lineInput = new Scanner(input.nextLine());
        while (lineInput.hasNext()) {               
            final String urlString = lineInput.next();
            String buttonText = lineInput.next();
            JButton btn = new JButton(buttonText);
            add(btn);
            btn.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {                    
                    try {
                        URL videoURL = new URL(urlString);
                        URLConnection videoConnection = videoURL.openConnection();
                        videoConnection.connect();
                        openWebpage(videoURL);
                    } 
                    catch (MalformedURLException mue) {} 
                    catch (IOException ioe) {}
                    setEnabled(false);
                }
            });
        }
    }
}

public static void openWebpage(URI uri) {
    Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null;
    if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
        try {
            desktop.browse(uri);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

public static void openWebpage(URL url) {
    try {
        openWebpage(url.toURI());
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) throws FileNotFoundException {
    VideoRecord vr = new VideoRecord();
}

}花点时间看看您的代码

btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {                    
                try {
                    URL videoURL = new URL(urlString);
                    URLConnection videoConnection = videoURL.openConnection();
                    videoConnection.connect();
                    openWebpage(videoURL);
                } 
                catch (MalformedURLException mue) {} 
                catch (IOException ioe) {}
                setEnabled(false);
            }
        });
当您单击一个按钮时,您调用
setEnabled(false)

这实际上禁用了框架,而不是单击的按钮

  • 尝试改用
    ((JButton)e.getSource()).setEnabled(false)
  • 不要盲目地抛弃你的异常,它们提供了重要而有用的信息,可以帮助你解决问题

  • 花点时间看看你的代码

    btn.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {                    
                    try {
                        URL videoURL = new URL(urlString);
                        URLConnection videoConnection = videoURL.openConnection();
                        videoConnection.connect();
                        openWebpage(videoURL);
                    } 
                    catch (MalformedURLException mue) {} 
                    catch (IOException ioe) {}
                    setEnabled(false);
                }
            });
    
    当您单击一个按钮时,您调用
    setEnabled(false)

    这实际上禁用了框架,而不是单击的按钮

  • 尝试改用
    ((JButton)e.getSource()).setEnabled(false)
  • 不要盲目地抛弃你的异常,它们提供了重要而有用的信息,可以帮助你解决问题


  • 从你问题的标题,我猜你的代码会有空的catch块。我悲哀地发现我是对的。请解决这个问题,至少打印出stacktraces,您可能会发现问题,然后找到解决方案。一般来说,您几乎不应该像上面那样拥有空的catch块?不要盲目地抛弃你的异常,它们提供了重要和有用的信息information@MadProgrammer:这应该是一个答案。@HovercraftFullOfEels我不想得到的involved@RobinK. 但是
    setEnabled
    属于什么?从你问题的标题来看,我猜你的代码会有空的catch块。我悲哀地发现我是对的。请解决这个问题,至少打印出stacktraces,您可能会发现问题,然后找到解决方案。一般来说,您几乎不应该像上面那样拥有空的catch块?不要盲目地抛弃你的异常,它们提供了重要和有用的信息information@MadProgrammer:这应该是一个答案。@HovercraftFullOfEels我不想得到的involved@RobinK. 但是
    setEnabled
    属于什么?它会影响所有按钮吗?我只想一个点击按钮被禁用,但其他的应该继续工作。据说,这让我不必再看同一段视频两次。很高兴你参与其中。。。1 +哦,是的,谢谢。代码> StabelEng/<代码>是一种方法:<代码> jFrase>代码>,你已经禁用了这个框架……考虑使用更像<代码>((jButt).GETSoCube())的东西。我只想一个点击按钮被禁用,但其他的应该继续工作。据说,这让我不必再看同一段视频两次。很高兴你参与其中。。。1 +哦,是的,谢谢。代码> StabelEng/<代码>是一种方法:<代码> jFrase>代码>,你已经禁用了框架……考虑使用一些更类似于<代码>((jButt)E.GETSoCube())的方法。