2015-10-20 53 views
2

我想显示背景图像,但它不会工作,我已经尝试过多次它回来这个错误有史以来。每次它说的重复场,我不知道是什么意思,我在Java为什么JFrame背景图片不工作?

这里初学者是错误

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 

这try块造成的背景错误:

try {    
    BufferedImage img = ImageIO.read(new File("bible.jpg")); 
    } catch(IOException e) { 

    } 

谢谢

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. 
     } 

    } 
} 
} 
+2

这个问题没有很好的结构来提供一个确切的答案。如果您可以删除不必要的行,并且可以重现错误,您可能会自己找到错误。突出显示导致此行的行。 –

+0

再看一遍 – lyndact

回答

3

你try块:

try {    
BufferedImage img = ImageIO.read(new File("bible.jpg")); 
} catch(IOException e) { 
} 
}); 

是任何方法或构造之外,这是不允许的。我建议你

  1. 把它移到一个构造函数或方法中。
  2. 不要忽略异常,因为这是非常危险的编码。至少打印出异常的堆栈跟踪。

此外,为什么你在图像阅读,但随后什么都不做?

例如

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); 
      } 
     } 
     // ..... 
+0

你可以发布所有代码@Hovercraft Full Of Eels – lyndact

2

看起来你放置在一个文件中的所有类可能变成你的情况会混乱 错误,请检查Java文档

Java虚拟机试图读取一个类文件,并确定 文件格式不正确或以其他方式不能被解释为类 文件

http://docs.oracle.com/javase/7/docs/api/java/lang/ClassFormatError.html

+1

其实在这种情况下可以,因为所有的类都是内部类。 –