2015-10-20 74 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

其實在這種情況下可以,因爲所有的類都是內部類。 –