2016-12-28 16 views
0

ファイルをコピーして別の場所に貼り付けるプログラムをいくつかのApache IOメソッドを使用して作成しようとしています。 Eclipseでは完全に動作しますが、JARにエクスポートすると、JARは実行されません。 "Past Filepaths.txt"ファイルはプロジェクトフォルダにあります。私がタスクマネージャーを見ると、それが消える前に数秒間起動することがわかります。私はこれをコメントアウトした場合、jarが実行されないif文

if (filePaths.length == 2){ 
     source.setText(filePaths[0]); 
     dest.setText(filePaths[1]); 
} 

JARの実行を:私は、単一のifの文にそれを絞り込むました。私がしなければ、それはしません。

これは、スクリプトの種類として〜30分で作成した非常に粗いコードです。ファイルを移動するのに役立ちます。少し荒く見える場合は、お詫び申し上げます。

私の完全なコード:

public class Main { 
    private JFrame jf = new JFrame(); 
    private JTextField source, dest; 
    private String sourcePath, destPath; 

public Main() { 
    String[] filePaths = null; 
    try { 
     filePaths = FileUtils.readFileToString(new File("Past Filepaths.txt"), "ASCII").split("~"); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 

    JPanel panel = new JPanel(); 
    JButton jButton = new JButton("Update Files"); 

    source = new JTextField("", 40); 
    dest = new JTextField("", 40); 

    if (filePaths.length == 2){ 
     source.setText(filePaths[0]); 
     dest.setText(filePaths[1]); 
    } 

    jButton.addActionListener((e) -> { 
     updateVars(); 
     updateFiles(); 
    }); 
    jf.setSize(500, 200); 
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jf.setLocationRelativeTo(null); 
    jf.setResizable(false); 
    jf.add(panel); 
    panel.add(new JLabel("Source")); 
    panel.add(source); 
    panel.add(new JLabel("Destination")); 
    panel.add(dest); 
    panel.add(jButton); 
    jf.setVisible(true); 
} 

private void updateVars(){ 
    sourcePath = source.getText(); 
    destPath = dest.getText(); 
} 

private void updateFiles(){ 
    if(new File(sourcePath).exists() == false){ 
     JOptionPane.showMessageDialog(jf, sourcePath + " is not a valid file path!"); 
     return; 
    } 

    if(new File(destPath).exists() == false){ 
     JOptionPane.showMessageDialog(jf, destPath + " is not a valid file path!"); 
     return; 
    } 

    try { 
     FileUtils.copyDirectory(new File(sourcePath), new File(destPath)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    File pastFiles = new File("Past Filepaths.txt"); 
    try{ 
     FileUtils.write(pastFiles, sourcePath + "~", "ASCII"); 
     FileUtils.write(pastFiles, destPath, "ASCII", true); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 
+0

実行中のディレクトリに '過去のファイルパス.txt'がありますか?それがあなたのものでなければ、あなたが描いている振る舞いとまったく同じになるでしょう。 –

+0

@DavidWallaceはい。それはプロジェクトフォルダにあります。 –

+0

'java -jar/path/to/jarfile'でコマンドラインからjarを起動できますか?それは役に立つ情報を与えるでしょう。 –

答えて

2

これは、デバッグの問題ではなく、それ自体のコードの問題です。だから、それをデバッグしてください。

デバッグモードでJVMを起動

:あなたはあなたのIDEがそれに接続するまでsuspend=yが実行を停止することを

java -Xdebug -agentlib:jdwp=transport=dt_socket,address=9999,server=y,suspend=y <rest of your startup command> 

注意を。

実行を停止するブレークポイントを設定し、デバッグポート9999address=9999)にIDEを接続し、コードをステップ実行して何が起きているかを確認します。