2015-04-01 2 views
1

Попытка добавить информацию о моем проекте and..this мой код:ява читатель clasloader/после экспорта не работает

import java.awt.EventQueue; 

public class InfoView extends JDialog { 

ClassLoader classLoader = this.getClass().getClassLoader(); 
File fileChange = new File(classLoader.getResource("changelog.txt").getFile()); 
File fileTodo = new File(classLoader.getResource("TODO.txt").getFile()); 
File filePoradnik = new File(classLoader.getResource("Poradnik.txt").getFile()); 
File file; 

public InfoView(JFrame frame, boolean b, int a) { 
    setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
    setModal(b); 

    setMinimumSize(new Dimension(200, 100)); 
    setBounds(100, 100, 450, 300); 
    getContentPane().setLayout(new GridLayout(0, 1, 0, 0)); 

    JTextArea txtchangelog = new JTextArea(); 
    txtchangelog.setEditable(false); 
    txtchangelog.setFont(new Font("Monospaced", Font.PLAIN, 13)); 
    JScrollPane sp = new JScrollPane(txtchangelog); 
    getContentPane().add(sp); 

    switch(a){ 
    case 0: 
     file=filePoradnik; 
     break; 
    case 1: 
     file=fileTodo; 
     break; 
    case 2: 
     file=fileChange; 
     break; 
    } 

    try 
    { 
     FileReader reader = new FileReader(file); 
     BufferedReader br = new BufferedReader(reader); 
     txtchangelog.read(br, null); 
     br.close(); 
     txtchangelog.requestFocus(); 
     reader.close(); 
    } 
    catch(Exception e2) 
    { System.out.println(e2); } 
    //setVisible(true); 
    repaint(); 
} 

Проблема заключается в том, что, когда в работе в затмении он работает, но когда я делаю банка файл он dosen't ... Agr не нашли какое-либо решение в ...

Что не так .... пытаюсь прочитать файл в банке .......


Я думаю, что нашел ..

ClassLoader classLoader = this.getClass().getClassLoader(); 
    InputStream fileChange =classLoader.getResourceAsStream("changelog.txt"); 
    InputStream fileTodo = classLoader.getResourceAsStream("TODO.txt"); 
    InputStream filePoradnik =classLoader.getResourceAsStream("Poradnik.txt"); 
    InputStream file; 
    BufferedReader br = new BufferedReader(new InputStreamReader(file)); 
    txtchangelog.read(br, null); br.close(); 
    txtchangelog.requestFocus(); 
    file.close(); 

ответ

0

Это не работает, потому что есть семантическое различие между классами нагрузки от ClassLoader и относительно файла класса:

  1. ClassLoader.getResource() будет пытаться загрузить класс из пути к классам, но если файл существует в файле JAR, он не будет загружен
  2. Class.getResource() будет пытаться загрузить класс относительно файла класса, даже если он является частью JAR-файла

IDE обычно выполняют код из каталогов, а не JAR-файлов. Вы должны использовать следующий код:

File fileChange = new File(getClass().getResource("changelog.txt").getFile()); 
+0

Так почему это работало:. ClassLoader сл = this.getClass() getClassLoader(); \t public ImageIcon ICON_COMPUTER = new ImageIcon (cl.getResource ("images/my_computer.png")); ?? Все еще вызов classloader и файлов был в директории jar. Но тот же метод не работал. – MrNice

+0

Я объяснил в своем ответе. – Crazyjavahacking

Смежные вопросы