Java 为什么JFrame背景图像不工作?

Java 为什么JFrame背景图像不工作?,java,swing,jframe,Java,Swing,Jframe,我试图显示一个背景图像,但它不会工作,我已经尝试了多种方法,但每次都会出现此错误。每次它说重复字段,我都不知道这意味着什么,我是java的初学者 这里是错误 Exception in thread "main" java.lang.ClassFormatError: Duplicate field name&signature in class file search/text/file/SearchTextFile$1 at java.lang.ClassLoader.d

我试图显示一个背景图像,但它不会工作,我已经尝试了多种方法,但每次都会出现此错误。每次它说重复字段,我都不知道这意味着什么,我是java的初学者

这里是错误

Exception in thread "main" java.lang.ClassFormatError: Duplicate field        name&signature in class file search/text/file/SearchTextFile$1
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at search.text.file.SearchTextFile.<init>(SearchTextFile.java:46)
at search.text.file.SearchTextFile.main(SearchTextFile.java:42)
Java Result: 1
多谢各位

Java代码: package search.text.file

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.imageio.ImageIO;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class SearchTextFile {

public static void main(String[] args) {
    new SearchTextFile();
}

public SearchTextFile() {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
            }


            JFrame frame = new JFrame("Bible Search");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());
            frame.add(new TestPane());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
try {            
BufferedImage img = ImageIO.read(new File("bible.jpg"));
} catch(IOException e ) {
}
});


}

public class TestPane extends JPanel {

    private JTextField findText;
    private JButton search;
    private DefaultListModel<String> model;
    private JList list;

    private String searchPhrase;

    public TestPane() {
        setLayout(new BorderLayout());
        JPanel searchPane = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.insets = new Insets(2, 2, 2, 2);
        searchPane.add(new JLabel("Find: "), gbc);
        gbc.gridx++;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.weightx = 1;
        findText = new JTextField(20);
        searchPane.add(findText, gbc);

        gbc.gridx++;
        gbc.fill = GridBagConstraints.NONE;
        gbc.weightx = 0;
        search = new JButton("Search");
        searchPane.add(search, gbc);

        add(searchPane, BorderLayout.NORTH);

        model = new DefaultListModel<>();
        list = new JList(model);
        list.setCellRenderer(new HighlightListCellRenderer());
        add(new JScrollPane(list));

        ActionHandler handler = new ActionHandler();

        search.addActionListener(handler);
        findText.addActionListener(handler);

        try (BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("bible.txt")))) {

            String text = null;
            while ((text = reader.readLine()) != null) {
                model.addElement(text);
            }

        } catch (IOException exp) {

            exp.printStackTrace();

        }
    }

    public class ActionHandler implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            searchPhrase = findText.getText();
            if (searchPhrase != null && searchPhrase.trim().length() == 0) {
                searchPhrase = null;
            }
            list.repaint();
//              model.removeAllElements();
////                    BufferedReader reader = null;
//
//              String searchText = findText.getText();
//              try (BufferedReader reader = new BufferedReader(new     FileReader(new File("bible.txt")))) {
//
//                  String text = null;
//                  while ((text = reader.readLine()) != null) {
//
//                      if (text.contains(searchText)) {
//
//                          model.addElement(text);
//
//                      }
//
//                  }
//
//              } catch (IOException exp) {
//
//                  exp.printStackTrace();
//                  JOptionPane.showMessageDialog(TestPane.this, "Something Went     Wrong", "Error", JOptionPane.ERROR_MESSAGE);
//
//              }
        }
    }

    public class HighlightListCellRenderer extends DefaultListCellRenderer {

        public final String WITH_DELIMITER = "((?<=%1$s)|(?=%1$s))";

        @Override
        public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            if (value instanceof String && searchPhrase != null) {
                String text = (String) value;
                if (text.contains(searchPhrase)) {
                    text = text.replace(" ", "&nbsp;");
                    value = "<html>" + text.replace(searchPhrase, "<span STYLE='background-color: #ffff00'>" + searchPhrase + "</span>") + "</html>";
                }
            }
            return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); //To change body of generated methods, choose Tools | Templates.
        }

    }
}
}
导入java.awt.BorderLayout;
导入java.awt.Component;
导入java.awt.EventQueue;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.Image;
导入java.awt.Insets;
导入java.awt.Toolkit;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.image.buffereImage;
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入javax.imageio.imageio;
导入javax.swing.DefaultListCellRenderer;
导入javax.swing.DefaultListModel;
导入javax.swing.ImageIcon;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JList;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTextField;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公共类SearchTextFile{
公共静态void main(字符串[]args){
新建SearchTextFile();
}
公共搜索文本文件(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
}
JFrame=newjframe(“圣经搜索”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BorderLayout());
frame.add(newtestpane());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
试试{
buffereImage img=ImageIO.read(新文件(“bible.jpg”);
}捕获(IOE异常){
}
});
}
公共类TestPane扩展了JPanel{
私有JTextField findText;
私有按钮搜索;
私有模型;
私人名单;
私有字符串搜索短语;
公共测试窗格(){
setLayout(新的BorderLayout());
JPanel searchPane=newjpanel(newgridbaglayout());
GridBagConstraints gbc=新的GridBagConstraints();
gbc.gridx=0;
gbc.gridy=0;
gbc.插图=新插图(2,2,2,2);
searchPane.add(新JLabel(“Find:”),gbc);
gbc.gridx++;
gbc.fill=GridBagConstraints.HORIZONTAL;
gbc.weightx=1;
findText=新的JTextField(20);
searchPane.add(findText,gbc);
gbc.gridx++;
gbc.fill=GridBagConstraints.NONE;
gbc.weightx=0;
搜索=新按钮(“搜索”);
searchPane.add(搜索,gbc);
添加(搜索窗格,BorderLayout.NORTH);
model=新的DefaultListModel();
列表=新JList(型号);
setCellRenderer(新的HighlightListCellRenderer());
添加(新的JScrollPane(列表));
ActionHandler=新的ActionHandler();
addActionListener(处理程序);
findText.addActionListener(处理程序);
try(BufferedReader=new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(“bible.txt”))){
字符串文本=空;
而((text=reader.readLine())!=null){
模型.附录(文本);
}
}捕获(IOException exp){
exp.printStackTrace();
}
}
公共类ActionHandler实现ActionListener{
@凌驾
已执行的公共无效操作(操作事件e){
searchPhrase=findText.getText();
if(searchPhrase!=null&&searchPhrase.trim().length()=0){
searchPhrase=null;
}
list.repaint();
//model.removeAllElements();
////BufferedReader reader=null;
//
//字符串searchText=findText.getText();
//try(BufferedReader=newbufferedreader(newfilereader(新文件(“bible.txt”))){
//
//字符串文本=空;
//而((text=reader.readLine())!=null){
//
//if(text.contains(searchText)){
//
//模型.附录(文本);
//
//                      }
//
//                  }
//
//}catch(IOException exp){
//
//exp.printStackTrace();
//showMessageDialog(TestPane.this,“出错”,“错误”,JOptionPane.Error\u消息);
//
//              }
}
}
公共类HighlightListCellRenderer扩展了DefaultListCellRenderer{
带有_DELIMITER=“(?您的try块:

try {            
BufferedImage img = ImageIO.read(new File("bible.jpg"));
} catch(IOException e ) {
}
});
在任何方法或构造函数之外,这是不允许的。我建议您

  • 将其移动到构造函数或方法中
  • 不要在编写代码时忽略异常,因为这是非常危险的。至少要打印出异常的堆栈跟踪
  • 还有,为什么你在阅读一幅图像,却什么也不做

    e、 g

    公共类SearchTextFile2{
    私有静态void createAndShowGui(){
    BuffereImage img=null;
    试一试{
    //最好是作为资源而不是文件获取
    img=ImageIO.read(新文件(“bible.jpg”);
    }捕获(IOE异常){
    e、 printStackTrace();
    }
    JFrame=newJFrame(“SearchTextFile2”);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(新测试窗格(img));//将图像传递到测试窗格
    frame.pack();
    frame.setLocatio
    
    try {            
    BufferedImage img = ImageIO.read(new File("bible.jpg"));
    } catch(IOException e ) {
    }
    });
    
    public class SearchTextFile2 {
    
        private static void createAndShowGui() {
            BufferedImage img = null;
            try {
                // better to get as a resource and not as a File
                img = ImageIO.read(new File("bible.jpg"));
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            JFrame frame = new JFrame("SearchTextFile2");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(new TestPane(img)); // pass image into TestPane
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGui();
                }
            });
        }
    
        // make TestPane a static inner class
        // have TestPane display image within its paintComponent method
        public static class TestPane extends JPanel {
            private JTextField findText;
            private JButton search;
            private DefaultListModel<String> model;
            private JList list;
            private BufferedImage img;
            private String searchPhrase;
    
            public TestPane(BufferedImage img) {
                setLayout(new BorderLayout());
                this.img = img;
                // etc.....
            }
    
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                if (img != null) {
                    g.drawImage(img, 0, 0, this);
                }
            }
            // .....