2016-08-26 3 views
0

Я пытаюсь создать приложение, которое может читать информацию из файлов Excel и помещать данные в документ. Документ представляет собой форму шаблона со столбцами. Все работает нормально до сохранения.Сохранить Word-файл с Java (runnable JAR)

Это работает почти так же, как и при запуске программы непосредственно в IntelliJ. Однако, когда я устанавливаю приложение в runnable JAR с Maven - JAR не будет работать.

Файл сохраняется как требуется ... Но новый файл ничего не содержит, если я запускаю приложение из JAR. Когда я запускаю непосредственно в IntelliJ, новый файл создается и открывается, но из 3 столбцов/строк только 2 имеет в нем данные.

Что я могу сделать?

Ссылка на шаблон документа

http://www.labelmedia.de/englisch/doc/70%20x%2032%20mm%20-%20Art.%2088%2010%2027%2070%2032.doc

Спасибо расширенному

package utils; 

import model.Customers; 
import org.apache.poi.hwpf.HWPFDocument; 
import org.apache.poi.hwpf.usermodel.*; 
import org.apache.poi.poifs.filesystem.POIFSFileSystem; 
import java.awt.*; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.util.ArrayList; 

public class WriteToDocument { 
    String TARGET_FILE = "src\\main\\java\\utils\\template\\template.doc"; 
    private int postInList = 0; 

    public WriteToDocument() {} 

    public WriteToDocument(ArrayList<Customers> list) throws IOException { 
     list.remove(0); 

     HWPFDocument doc = null; 
     try { 
      doc = openDocument(TARGET_FILE); 

      Range range = doc.getRange(); 
      TableIterator itr = new TableIterator(range); 
      while (itr.hasNext()) { 
       Table table = itr.next(); 
       for (int rowIndex = 0; rowIndex < table.numRows(); rowIndex++) { 
        TableRow row = table.getRow(rowIndex); 
        for (int colIndex = 0; colIndex < row.numCells(); colIndex++) { 
         TableCell cell = row.getCell(colIndex); 

         //WRITE IN TABLE // 
         if (postInList < list.size()) { 
          cell.getParagraph(0).replaceText(list.get(postInList).getName() + "\n\r" + 
            "\n\r" + list.get(postInList).getAddress() + "\n\r" + 
            list.get(postInList).getPostcode() + " " + list.get(postInList).getCity(), false); 
          postInList++; 
         } 
        } 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      saveDocument(doc); 

     } 
    } 

    private HWPFDocument openDocument(String file) throws Exception { 
     System.out.println("OPEN"); 
     return new HWPFDocument(new POIFSFileSystem(new FileInputStream(file))); 
    } 

    private static void saveDocument(HWPFDocument doc) throws IOException { 
     System.out.println("SAVE"); 
     try (FileOutputStream out = new FileOutputStream(new File("test.doc"))) { 
      doc.write(out); 
      out.flush(); 
      System.out.println("File saved"); 
      doc.close(); 
      out.close(); 
      Desktop dt = Desktop.getDesktop(); 
      dt.open(new File("test.doc")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
     } 
    } 

StackTrace

java.io.FileNotFoundException: src\main\java\utils\template\template.doc (Det går inte att hitta sökvägen) 
     at java.io.FileInputStream.open0(Native Method) 
     at java.io.FileInputStream.open(Unknown Source) 
     at java.io.FileInputStream.<init>(Unknown Source) 
     at java.io.FileInputStream.<init>(Unknown Source) 
     at utils.WriteToDocument.openDocument(WriteToDocument.java:56) 
     at utils.WriteToDocument.<init>(WriteToDocument.java:25) 
     at utils.ReadExcel.writeToDocument(ReadExcel.java:64) 
     at utils.ReadExcel.<init>(ReadExcel.java:57) 
     at MainFrameController$1.actionPerformed(MainFrameController.java:31) 
     at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
     at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
     at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
     at java.awt.Component.processMouseEvent(Unknown Source) 
     at javax.swing.JComponent.processMouseEvent(Unknown Source) 
     at java.awt.Component.processEvent(Unknown Source) 
     at java.awt.Container.processEvent(Unknown Source) 
     at java.awt.Component.dispatchEventImpl(Unknown Source) 
     at java.awt.Container.dispatchEventImpl(Unknown Source) 
     at java.awt.Component.dispatchEvent(Unknown Source) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
     at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
     at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
     at java.awt.Container.dispatchEventImpl(Unknown Source) 
     at java.awt.Window.dispatchEventImpl(Unknown Source) 
     at java.awt.Component.dispatchEvent(Unknown Source) 
     at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
     at java.awt.EventQueue.access$500(Unknown Source) 
     at java.awt.EventQueue$3.run(Unknown Source) 
     at java.awt.EventQueue$3.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
     at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
     at java.awt.EventQueue$4.run(Unknown Source) 
     at java.awt.EventQueue$4.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
     at java.awt.EventQueue.dispatchEvent(Unknown Source) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
     at java.awt.EventDispatchThread.run(Unknown Source) 
SAVE 
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
     at utils.WriteToDocument.saveDocument(WriteToDocument.java:62) 
     at utils.WriteToDocument.<init>(WriteToDocument.java:49) 
     at utils.ReadExcel.writeToDocument(ReadExcel.java:64) 
     at utils.ReadExcel.<init>(ReadExcel.java:57) 
     at MainFrameController$1.actionPerformed(MainFrameController.java:31) 
     at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
     at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
     at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
     at java.awt.Component.processMouseEvent(Unknown Source) 
     at javax.swing.JComponent.processMouseEvent(Unknown Source) 
     at java.awt.Component.processEvent(Unknown Source) 
     at java.awt.Container.processEvent(Unknown Source) 
     at java.awt.Component.dispatchEventImpl(Unknown Source) 
     at java.awt.Container.dispatchEventImpl(Unknown Source) 
     at java.awt.Component.dispatchEvent(Unknown Source) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
     at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
     at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
     at java.awt.Container.dispatchEventImpl(Unknown Source) 
     at java.awt.Window.dispatchEventImpl(Unknown Source) 
     at java.awt.Component.dispatchEvent(Unknown Source) 
     at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
     at java.awt.EventQueue.access$500(Unknown Source) 
     at java.awt.EventQueue$3.run(Unknown Source) 
     at java.awt.EventQueue$3.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
     at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
     at java.awt.EventQueue$4.run(Unknown Source) 
     at java.awt.EventQueue$4.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
     at java.awt.EventQueue.dispatchEvent(Unknown Source) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
     at java.awt.EventDispatchThread.run(Unknown Source) 
+2

Попробуйте запустить jar из командной строки, выполнив 'java -jar/path/to/jar/file.jar' и посмотрев, есть ли стекtrace – Orin

+0

Вы связали файл шаблона в своей банке? Или это все еще снаружи? – Gagravarr

ответ

1

Большинство probabl y вам не хватает библиотек, когда они экспортируются как JAR. Вы используете Apache POI в качестве внешних библиотек. Внутри IDE были применены все библиотеки, но при экспорте они, кажется, отсутствуют. Просто запустите файл jar из командной строки, чтобы на 100% понять проблему. В IDE, таких как NetBeans, библиотеки экспортируются в отдельную папку с именем lib, ищите аналогичные данные, связанные с вашей IDE.

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