简体   繁体   English

当导出可运行的jar程序不起作用时的Eclipse

[英]Eclipse when export runnable jar program doesn't work

I have a project in Java but when I export a runnable jar, the program doesn't work. 我有一个Java项目,但是当我导出一个可运行的jar时,该程序不起作用。 Can anyone help me? 谁能帮我?

Here is my project code: 这是我的项目代码:

import java.awt.EventQueue;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.Window.Type;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;


public class Main {
    //main
     static ArrayList<Font> fontList= new ArrayList<Font>();
    String[] alfabe ={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","R","S","T","U","V","X","Q","W","Y","Z",
                      "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","r","s","t","u","v","x","q","w","y","z",
                      "0","1","2","3","4","5","6","7","8","9"};
    String[] trAlfabe = {"a","b","c","ç","d","e","f","g","ğ","h","ı","i","j","k","l","m","n","o","ö","p","r","s","ş","t","u","ü","v","y","z"};
    private JFrame frmKelimeArac;
    private JTextField textField;

    String[] fakeAlfabe = alfabe;
    String[] fakeTrAlfabe = trAlfabe;
    private JTextField textKelime;

    double kelimeSirasi;




    public static void main(String[] args) {
        final File folder = new File("Fonts/");
        listFilesForFolder(folder);
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Main window = new Main();
                    window.frmKelimeArac.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

      public static  void listFilesForFolder(final File folder) {
            for (final File fileEntry : folder.listFiles()) {
                if (fileEntry.isDirectory()) {
                    listFilesForFolder(fileEntry);
                } else {
                     Font font;
                    try {
                        font = Font.createFont(Font.TRUETYPE_FONT, fileEntry);
                        font = font.deriveFont(Font.PLAIN,18);
                        fontList.add(font);
                    } catch (FontFormatException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                }
            }
        }



    /**
     * Create the application.
     */
    public Main() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */

    @SuppressWarnings("unchecked")
    private void initialize() {
        frmKelimeArac = new JFrame();
        frmKelimeArac.setType(Type.UTILITY);
        frmKelimeArac.setTitle("Kelime Arac");
        frmKelimeArac.setBounds(100, 100, 691, 399);
        frmKelimeArac.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmKelimeArac.getContentPane().setLayout(null);

        textField = new JTextField();
        textField.setToolTipText("Kelime yaz\u0131n\u0131z");
        textField.setBounds(150, 11, 149, 20);
        frmKelimeArac.getContentPane().add(textField);
        textField.setColumns(10);

        JButton btnNewButton = new JButton("Sorgula");
        btnNewButton.setBounds(177, 42, 89, 23);
        frmKelimeArac.getContentPane().add(btnNewButton);


        final JLabel lblNewLabel = new JLabel("");

        lblNewLabel.setBounds(177, 78, 122, 14);
        frmKelimeArac.getContentPane().add(lblNewLabel);

        final JLabel lblKarakter = new JLabel("");
        lblKarakter.setBounds(177, 103, 122, 14);
        frmKelimeArac.getContentPane().add(lblKarakter);

        final JLabel lblSira = new JLabel("");
        lblSira.setBounds(455, 132, 160, 14);
        frmKelimeArac.getContentPane().add(lblSira);

        final JLabel lblFont = new JLabel("");
        lblFont.setBounds(177, 132, 201, 14);
        frmKelimeArac.getContentPane().add(lblFont);

        @SuppressWarnings("rawtypes")
        final JComboBox comboBox = new JComboBox();
        comboBox.setBounds(455, 11, 160, 20);
        for(Font font:fontList){
            comboBox.addItem(font.getFontName());
        }
        frmKelimeArac.getContentPane().add(comboBox);

        textKelime = new JTextField();
        textKelime.setToolTipText("Karakter");
        textKelime.setBounds(455, 45, 160, 20);
        frmKelimeArac.getContentPane().add(textKelime);
        textKelime.setColumns(10);
        JButton btnSorgula2 = new JButton("Sorgula");
        btnSorgula2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                if(textKelime.getText().trim().length()==1){
                    int index = index(fakeAlfabe, textKelime.getText().trim());
                    double aratoplam = fakeAlfabe.length*comboBox.getSelectedIndex();
                    lblSira.setText(kelimeSirasi+"");
                    kelimeSirasi = aratoplam + index;
                }else if(textKelime.getText().trim().length()==2){
                    int index = index(alfabe2li(fakeAlfabe), textKelime.getText().trim());
                    double aratoplam = alfabe2li(fakeAlfabe).length*comboBox.getSelectedIndex();
                    kelimeSirasi = aratoplam + index + fakeAlfabe.length*fontList.size()*fakeAlfabe.length;
                    lblSira.setText(kelimeSirasi+"");
                }
            }
        });
        btnSorgula2.setBounds(487, 69, 89, 23);
        frmKelimeArac.getContentPane().add(btnSorgula2);

        JLabel lblNewLabel_1 = new JLabel("Kelime S\u0131ras\u0131 :");
        lblNewLabel_1.setBounds(71, 78, 89, 14);
        frmKelimeArac.getContentPane().add(lblNewLabel_1);

        JLabel lblNewLabel_2 = new JLabel("Karakter :");
        lblNewLabel_2.setBounds(71, 103, 65, 14);
        frmKelimeArac.getContentPane().add(lblNewLabel_2);

        JLabel lblNewLabel_3 = new JLabel("Font Ad\u0131 :");
        lblNewLabel_3.setBounds(71, 132, 65, 14);
        frmKelimeArac.getContentPane().add(lblNewLabel_3);

        JLabel lblDipNotMaksimum = new JLabel("Dip Not: Maksimum 6 karakter i\u00E7in \u00E7al\u0131\u015Fmaktad\u0131r.");
        lblDipNotMaksimum.setBounds(10, 336, 655, 14);
        frmKelimeArac.getContentPane().add(lblDipNotMaksimum);


    btnNewButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                if(textField.getText().trim().length()<7){
                int sira = hesapla(textField.getText().toLowerCase());
                lblNewLabel.setText(sira+"");
                int karakter = sira%fakeAlfabe.length;
                lblKarakter.setText(karakter+"");
                if(sira<=fakeAlfabe.length*fontList.size()){
                    sira--;
                    lblFont.setText(fontList.get((sira/(fakeAlfabe.length))).getFontName());
                    lblKarakter.setText(fakeAlfabe[sira%(fakeAlfabe.length)]);
                }else{

                    sira--;
                    String[] alfabe2 = alfabe2li(fakeAlfabe);
                    int yenisira =(sira-fakeAlfabe.length*fontList.size());
                    lblFont.setText(fontList.get(yenisira/(fontList.size()*fakeAlfabe.length*fakeAlfabe.length)).getFontName());
                    lblKarakter.setFont(new Font (fontList.get(yenisira/(fontList.size()*fakeAlfabe.length*fakeAlfabe.length)).getName(),Font.PLAIN,16));
                    lblKarakter.setText(alfabe2[yenisira%(alfabe2.length)]);
                }
            }else {
                JOptionPane.showMessageDialog(null, "6 karakterden uzun kelime girmeyiniz.", ";Uyarı", JOptionPane.INFORMATION_MESSAGE);            }
        }
    });


    }



private String[] alfabe2li(String[] karakter){
    String [] alfabe = new String[karakter.length*karakter.length];
    for(int i=0;i<karakter.length;i++){
        for (int j = 0; j < karakter.length; j++) {
            String string = karakter[i]+karakter[j];
            alfabe[i*karakter.length+j]=string;
        }
    }
    return alfabe;
}
    private int hesapla(String kelime) {
        // TODO Auto-a method stub
        int uzunluk = kelime.length();
        String ters="";
        for ( int i = uzunluk - 1 ; i >= 0 ; i-- )
            ters = ters + kelime.charAt(i);
        double toplam = 0;
        //sıra hesaplama
        for(int a=0;a<ters.length();a++){
            if(a==0){
                toplam = index(fakeTrAlfabe,ters.charAt(a)+"");
            }else{
                toplam = toplam+(index(fakeTrAlfabe,ters.charAt(a)+"")-1)*Math.pow(fakeTrAlfabe.length, a);
            }
        }
        double aratoplam=0;
        for(int b=1;b<ters.length();b++){
            aratoplam=aratoplam+Math.pow(fakeTrAlfabe.length, b);
        }

        return ((int)(toplam+aratoplam));
    }
    int index(String [] alfabee,String harf){
        for(int i=0;i<alfabee.length;i++){
            if(alfabee[i].equals(harf)){
                return i+1;
            }
        }

        return -1;
    }
}

I think your problem is the relative path in the following line: 我认为您的问题是以下行中的相对路径:

final File folder = new File("Fonts/");

I suppose your jar file is not in the same folder as the "Fonts" folder. 我想您的jar文件与“字体”文件夹不在同一个文件夹中。 So it can't find the path "Fonts/", when you run the jar file. 因此,当您运行jar文件时,它找不到路径“ Fonts /”。

Try copying your JAR file on the same level as the "Fonts" folder and try it again 尝试将您的JAR文件复制到与“字体”文件夹相同的级别,然后重试

/PATHONYOURLOCALDISK/Fonts
/PATHONYOURLOCALDISK/yourjar.jar

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM