2014-12-02 3 views
0

У меня есть программа, которую я написал в Eclipse, и она работает нормально - файл HTML открывается при запуске программы через Eclipse. Но когда я создаю банку файл программы, все остальное работает нормально, кроме этого HTML-файл не открывается в браузере (или в любом месте):HTML-файл не открывается в исполняемом банке

operation.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      try { 
       File htmlFile = new File("help/operation.html"); 
       Desktop.getDesktop().browse(htmlFile.toURI()); 
      } catch (MalformedURLException MURLe) { 
       MURLe.printStackTrace(); 
      } catch (IOException ioE) { 
       ioE.printStackTrace(); 
      } 
     } 
    }); 

Остальная часть программы работает нормально, и мои изображения и звуки работают нормально и открываются, но этот HTML-файл не открывается в меню или с помощью сочетания клавиш Ctrl +. Ваша помощь приветствуется. Благодарю.

+0

Вы должны прочитать файл как поток – realUser404

+0

Был он работает до развертывания (без баночки файла)? – afzalex

+0

Его либо: 1. при запуске JAR, по сравнению с проектом eclipse, используется каталог по умолчанию для приложения. 2. .html находится внутри jar, и вы ожидаете, что класс File найдет его, что никогда не произойдет, поскольку оно скомпилировано в банку. – slipperyseal

ответ

1

Когда у вас есть файл внутри вашей банки, вы не можете получить к нему доступ, как сейчас. Вам нужно считать его потоком, это единственный способ.

0

Предположим, что ваш проект foo. Тогда help/operation.html будет относиться к
.. \ а \ помощи \ operation.html

Но развернутый файл банка не будет содержать его.
У вас есть этот файл operation.html в вашем исходном коде (где вы пишете код).
Затем eclipse (или любая IDE) добавит его в ваш файл jar при его развертывании.

И теперь вы можете использовать свой файл следующим образом. Предположим, что ваш файл присутствует, как показано на рисунке. enter image description here
Теперь вы можете сослаться на свой html-файл из любого класса. В этом примере это относится к классу Accesser.

File resFile = new File(Accesser.class.getResource("operation.html").toURI()); 

Если вы хотите открыть файл в браузере вы должны скопировать этот файл в системе в пользователя.

File htmlFile = new File("operation.html"); 
if(!htmlFile.exists) { 
    Files.copy(resFile.toPath(), htmlFile.toPath()); 
} 
Desktop.getDesktop().browse(htmlFile.toURI()); 

Файлы присутствует в java.nio.file пакете

+0

, но будет Desktop.getDesktop(). Browse (htmlFile.toURI()); иметь доступ к файлу? – slipperyseal

+1

Браузер не может читать файлы из заархивированного файла. Ему нужно будет скопировать этот файл в систему, если он захочет использовать этот файл в браузере. – afzalex

+0

Тогда приведенный выше ответ должен работать на вас и будет работать на любом другом компьютере, без необходимости копировать туда какой-либо файл. @btalbot – afzalex