双击jar,JFrame上的消息控制台无法正常工作

时间:2018-01-25 11:29:25

标签: java linux swing

所以我创建了一个消息控制台。并使用append来显示消息,它通过运行java -jar JavaProgram完美地工作,但是当我双击它时,应用程序运行,我看到JFrame但没有显示任何内容。我附加的文字不存在。

顺便说一句,在Windows上双击它会显示消息输出,但在我的linux系统上没有显示任何内容。

我在每台机器上运行相同版本的java。

以下代码:

  package pdfCounter;

import java.io.*;

import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collection;
import java.util.Iterator;
import org.apache.commons.io.FileUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class App {
    public static JTextArea textComponent;
    public static int count;

    public static void main(String args[])  {

       try {


           JFrame somePanel = new JFrame();
           somePanel.add(new JLabel(" Message Console"), BorderLayout.NORTH);


           textComponent = new JTextArea(5, 10);
           somePanel.setVisible(true);
           somePanel.setSize(900, 300);
           somePanel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

           somePanel.add(new JScrollPane(textComponent));
           pdfCounter.MessageConsole mc = new pdfCounter.MessageConsole(textComponent);
           mc.redirectOut(null, System.out);
           mc.redirectErr(Color.RED, null);


           Path currentRelativePath = Paths.get("");
           String s = currentRelativePath.toAbsolutePath().toString();
           File root = new File(s);
           count = 0;
           boolean recursive = true;

           Collection files = FileUtils.listFiles(root, null, recursive);

           for (Iterator iterator = files.iterator(); iterator.hasNext(); ) {
               try {
                   File file = (File) iterator.next();
                   if (file.getName().endsWith(".pdf")) {
                       String absoluteFile = file.getAbsolutePath();
                       append(absoluteFile);
                       PDDocument doc = PDDocument.load(new File(file.getAbsolutePath()));
                       count = doc.getNumberOfPages() + count;
                       doc.close();
                   }
               } catch (Exception e) {
                   continue;
               }


           }
       }
       catch(Exception e) {
          e.printStackTrace();
        }
            try (PrintStream out = new PrintStream(new FileOutputStream("NumberOfPages.txt"))) {
                    out.print(count);
            }
            catch (Exception e) {
                e.printStackTrace();
            }

    }
    public static void append(String absolutePath) {
        textComponent.append(absolutePath + "\n");

    }
}

当它到达`append(absoluteFile);这就是问题所在,因为它只附加在Windows而不是linux上。

更新:我想通过双击从不同的文件管理器打开它,使其工作。使用Nautilus是不会打开的,即使我选择使用java 8或9运行它。使用thunar(不同的文件管理器)打开它会使双击它没问题。两者都设置为使用java 9运行。我认为它与文件夹权限有关,因为如果我以root用户身份运行nautilus,它会在双击时起作用。

0 个答案:

没有答案