2012-07-26 2 views
1

Привет, я сделал небольшую программу с eclipse, и я пытаюсь отправить ее на другой компьютер для друзей, чтобы они могли также использовать программу. Я нашел прямо вперед учебник в Интернете по адресу: How to distribute java project built in Eclipse? и решение ребят был:распространение Java-программы с Eclipse

You can right-click the project, select Export and choose Java, then JAR as the format.

Однако, когда я только что и пытался отправить его на друг компьютер они получили эту ошибку:

Could not find the main class: pisavior.PISavior Program will now exit.

Я попытался экспортировать его как исполняемый файл jar и простой файл jar. Ничего не сработало. Я думаю, что проблема может быть в моем основном классе? Может быть, его не читают? Или, возможно, библиотеки не отправляются? Может ли кто-нибудь дать мне какое-то направление, пожалуйста? Очень признателен!

это мой код, своего рода длинный ...

import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import java.util.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.*; 

public class PISavior implements MouseListener { 

    Random random = new Random(); 
    private static int amount; 
    private static int editLine; 

    private static String locations[]; 
    private static String usernames[]; 
    private static String passwords[]; 

    private final char LOWERCASE[] = 
    { 
     'a', 'b', 'c', 'd', 'e', 
     'f', 'g', 'h', 'i', 'j', 
     'k', 'l', 'm', 'n', 'o', 
     'p', 'q', 'r', 's', 't', 
     'u', 'v', 'w', 'x', 'y', 
     'z' 
    }; 
    private final char UPPERCASE[] = 
    { 
     'A', 'B', 'C', 'D', 'E', 
     'F', 'G', 'H', 'I', 'J', 
     'K', 'L', 'M', 'N', 'O', 
     'P', 'Q', 'R', 'S', 'T', 
     'U', 'V', 'W', 'X', 'Y', 
     'Z' 
    }; 
    private final char NUMBERS[] = 
    { 
     '0', '1', '2', '3', '4', 
     '5', '6', '7', '8', '9' 
    }; 

    private static volatile boolean edit = false; 

    JFrame frame = new JFrame(); 
    JPanel panel = new JPanel(); 

    JCheckBox jcb_Integers = new JCheckBox("Integers"); 
    JCheckBox jcb_Capitals = new JCheckBox("Capitals"); 

    JScrollPane jscroll; 

    JLabel jlb_Location = new JLabel("Location"); 
    JLabel jlb_Username = new JLabel("Username"); 
    JLabel jlb_Password = new JLabel("Password"); 
    JLabel jlb_Amount = new JLabel("Amount:"); 
    JLabel jlb_Length = new JLabel("Length:"); 
    JLabel jlb_Locations[]; 
    JLabel jlb_Usernames[]; 
    JLabel jlb_Passwords[]; 

    JButton jbt_AddLocation = new JButton("Add Location"); 
    JButton jbt_Save = new JButton("Save"); 
    JButton jbt_Add = new JButton("Add"); 
    JButton jbt_Randomize = new JButton("Randomize"); 
    JButton jbt_Edit = new JButton("Edit"); 

    JTextField jtf_Locations[]; 
    JTextField jtf_Usernames[]; 
    JTextField jtf_Passwords[]; 
    JTextField jtf_Location = new JTextField(); 
    JTextField jtf_Username = new JTextField(); 
    JTextField jtf_Password = new JTextField(); 
    JTextField jtf_Integers = new JTextField(); 
    JTextField jtf_Capitals = new JTextField(); 
    JTextField jtf_Length = new JTextField(); 

    public static void main(String args[]) throws FileNotFoundException{ 
     new PISavior(); 
    } 

    public PISavior() throws FileNotFoundException{ 
     panel.setLayout(null); 
     panel.addMouseListener(this); 
     panel.setBounds(0, 0, 400,400); 
     load(); 
     addMainUI(); 
     //====================================================================== 
     // ** Main User Interface 
     //====================================================================== 
     panel.add(jlb_Location); 
     panel.add(jlb_Username); 
     panel.add(jlb_Password); 
     jbt_AddLocation.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       edit = false; 
       removeMainUI(); 
       addLocationUI(); 
       panel.repaint(); 
      } 
    }); 
     jbt_Save.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       try { 
        save(); 
       } catch (IOException ex) { 
        Logger.getLogger(PISavior.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
    }); 
     //====================================================================== 
     // ** Add Location User Interface 
     //====================================================================== 
     jtf_Location.setBounds(5, 25, 100, 20); 
     jtf_Username.setBounds(5, 65, 100, 20); 
     jtf_Password.setBounds(5, 105, 100, 20); 
     jlb_Amount.setBounds(210, 10, 100, 20); 
     jcb_Integers.setBounds(130, 30, 80, 20); 
     jcb_Integers.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       jtf_Integers.setEnabled(jcb_Integers.isSelected()); 
      } 
    }); 
     jcb_Capitals.setBounds(130, 60, 80, 20); 
     jcb_Capitals.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       jtf_Capitals.setEnabled(jcb_Capitals.isSelected()); 
      } 
    }); 
     jtf_Integers.setBounds(210, 30, 50, 20); 
     jtf_Integers.setEnabled(false); 
     jtf_Integers.setText("0"); 
     jtf_Capitals.setBounds(210, 60, 50, 20); 
     jtf_Capitals.setEnabled(false); 
     jtf_Capitals.setText("0"); 
     jlb_Length.setBounds(135, 90, 80, 20); 
     jtf_Length.setBounds(210, 90, 50, 20); 
     jtf_Length.setText("0"); 
     jbt_Randomize.setBounds(140, 120, 100, 20); 
     jbt_Randomize.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       int length = Integer.parseInt(jtf_Length.getText()); 
       int integers = Integer.parseInt(jtf_Integers.getText()); 
       int capitals = Integer.parseInt(jtf_Capitals.getText()); 
       if (length != 0 && length >= (integers + capitals)) { 
        jtf_Password.setText(getRandomPassword(length, jcb_Integers.isSelected() != false ? integers : 0, jcb_Capitals.isSelected() != false ? capitals : 0)); 
       } 
      } 
    }); 
     jbt_Add.setBounds(20, 135, 60, 15); 
     jbt_Add.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       addInformation(jtf_Location.getText().length() == 0 ? "(Empty)" : jtf_Location.getText(), jtf_Username.getText().length() == 0 ? "(Empty)" : jtf_Username.getText(), jtf_Password.getText().length() == 0 ? "(Empty)" : jtf_Password.getText()); 
       jtf_Location.setText(""); 
       jtf_Username.setText(""); 
       jtf_Password.setText(""); 
       removeLocationUI(); 
       addMainUI(); 
       panel.repaint(); 
      } 
     }); 
     jbt_Edit.setBounds(20, 135, 60, 15); 
     jbt_Edit.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       int i = editLine; 
       locations[i] = jtf_Location.getText(); 
       usernames[i] = jtf_Username.getText(); 
       passwords[i] = jtf_Password.getText(); 
       jlb_Locations[i].setText(locations[i]); 
       jlb_Usernames[i].setText(usernames[i]); 
       jlb_Passwords[i].setText(passwords[i]); 
       jtf_Location.setText(""); 
       jtf_Username.setText(""); 
       jtf_Password.setText(""); 
       removeLocationUI(); 
       addMainUI(); 
       panel.repaint(); 
      } 
     }); 

     jscroll = new JScrollPane(panel); 
     frame.setTitle("Personal Information Savior"); 
     frame.setSize(300,240); 
     frame.setContentPane(jscroll); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
     frame.setResizable(false); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 


    public void removeMainUI() { 
     if (amount != 0) { 
      for (int i = 0; i < amount; i++) { 
       panel.remove(jlb_Locations[i]); 
       panel.remove(jlb_Usernames[i]); 
       panel.remove(jlb_Passwords[i]); 
      } 
     } 
     panel.remove(jbt_AddLocation); 
     panel.remove(jbt_Save); 
     panel.repaint(); 
    } 

    public void addMainUI() { 
     jlb_Location.setBounds(10, 5, 100, 20); 
     jlb_Username.setBounds(100, 5, 100, 20); 
     jlb_Password.setBounds(200, 5, 100, 20); 
     jbt_AddLocation.setBounds(75, (20 * amount) + 25, 110, 15); 
     jbt_Save.setBounds(90, (20 * amount) + 45, 80, 15); 
     jlb_Location.setText("Location"); 
     jlb_Username.setText("Username"); 
     jlb_Password.setText("Password"); 
     panel.setPreferredSize(new Dimension(200, amount * 30)); 
     if (amount != 0) { 
      for (int i = 0; i < amount; i++) { 
       jlb_Locations[i].setBounds(10, 25 + (i * 20), 100, 20); 
       jlb_Usernames[i].setBounds(100, 25 + (i * 20), 100, 20); 
       jlb_Passwords[i].setBounds(200, 25 + (i * 20), 100, 20); 
       panel.add(jlb_Locations[i]); 
       panel.add(jlb_Usernames[i]); 
       panel.add(jlb_Passwords[i]); 
      } 
     } 
     panel.add(jbt_AddLocation); 
     panel.add(jbt_Save); 
     panel.repaint(); 
    } 

    public void removeLocationUI() { 
     panel.remove(jtf_Location); 
     panel.remove(jtf_Username); 
     panel.remove(jtf_Password); 
     panel.remove(jlb_Amount); 
     panel.remove(jcb_Integers); 
     panel.remove(jcb_Capitals); 
     panel.remove(jtf_Integers); 
     panel.remove(jtf_Capitals); 
     panel.remove(jlb_Length); 
     panel.remove(jtf_Length); 
     panel.remove(jbt_Randomize); 
     panel.remove(jbt_Add); 
     panel.remove(jbt_Edit); 

     panel.repaint(); 
    } 

    public void addLocationUI() { 
     if (!edit) { 
      jlb_Location.setText("New Location:"); 
      jlb_Location.setBounds(5, 5, 100, 20); 
      jlb_Username.setText("New Username:"); 
      jlb_Username.setBounds(5, 45, 100, 20); 
      jlb_Password.setText("New Password:"); 
      jlb_Password.setBounds(5, 85, 100, 20); 
      panel.add(jtf_Location); 
      panel.add(jtf_Username); 
      panel.add(jtf_Password); 
      panel.add(jlb_Amount); 
      panel.add(jcb_Integers); 
      panel.add(jcb_Capitals); 
      panel.add(jtf_Integers); 
      panel.add(jtf_Capitals); 
      panel.add(jlb_Length); 
      panel.add(jtf_Length); 
      panel.add(jbt_Randomize); 
      panel.add(jbt_Add); 
      panel.repaint(); 
     } else { 
      jlb_Location.setText("New Location:"); 
      jlb_Location.setBounds(5, 5, 100, 20); 
      jlb_Username.setText("New Username:"); 
      jlb_Username.setBounds(5, 45, 100, 20); 
      jlb_Password.setText("New Password:"); 
      jlb_Password.setBounds(5, 85, 100, 20); 
      panel.add(jtf_Location); 
      panel.add(jtf_Username); 
      panel.add(jtf_Password); 
      panel.add(jlb_Amount); 
      panel.add(jcb_Integers); 
      panel.add(jcb_Capitals); 
      panel.add(jtf_Integers); 
      panel.add(jtf_Capitals); 
      panel.add(jlb_Length); 
      panel.add(jtf_Length); 
      panel.add(jbt_Randomize); 
      panel.add(jbt_Edit); 
      panel.repaint(); 
     } 
    } 

    public String getRandomPassword(int length, int integers, int capitals) { 
     int lowers = length - (integers + capitals); 
     String password = ""; 
     String scramble[] = new String[length]; 
     if (capitals != 0) { 
      for (int i = 0; i < capitals; i++) { 
       while (true) { 
        int randomScramble = random.nextInt(length); 
        if (scramble[randomScramble] == null || scramble[randomScramble].equals("")) { 
         scramble[randomScramble] = Character.toString(UPPERCASE[random.nextInt(UPPERCASE.length)]); 
         break; 
        } 
       } 
      } 
     } 
     if (integers != 0) { 
      for (int i = 0; i < integers; i++) { 
       while (true) { 
        int randomScramble = random.nextInt(length); 
        if (scramble[randomScramble] == null || scramble[randomScramble].equals("")) { 
         scramble[randomScramble] = Character.toString(NUMBERS[random.nextInt(NUMBERS.length)]); 
         break; 
        } 
       } 
      } 
     } 
     for (int i = 0; i < lowers; i++) { 
      while (true) { 
       int randomScramble = random.nextInt(length); 
       if (scramble[randomScramble] == null || scramble[randomScramble].equals("")) { 
        scramble[randomScramble] = Character.toString(LOWERCASE[random.nextInt(LOWERCASE.length)]); 
        break; 
       } 
      } 
     } 
     for (int i = 0; i < length; i++) { 
      password += scramble[i]; 
     } 
     return password; 
    } 

    public void save() throws IOException { 
     File dir = new File("C:/PISavior"); 
     if (!dir.exists()) { 
      dir.mkdir(); 
     } 
     File myfile = new File("C:/PISavior/myfile.txt"); 
     myfile.delete(); 
     myfile.createNewFile(); 
     PrintWriter output = new PrintWriter(myfile); 
     output.print(amount + "*"); 
     for (int i = 0; i < amount; i++) { 
      output.print(locations[i] + "*"); 
      output.print(usernames[i] + "*"); 
      output.print(passwords[i] + "*"); 
     } 
     output.close(); 
    } 

    public void load() throws FileNotFoundException { 
     File myfile = new File("C:/PISavior/myfile.txt"); 
     if (myfile.exists()) { 
      Scanner input = new Scanner(myfile); 
      while (input.hasNext()) 
      { 
       input.useDelimiter("[*]"); 
       amount = input.nextInt(); 

       locations = new String[amount]; 
       usernames = new String[amount]; 
       passwords = new String[amount]; 
       jlb_Locations = new JLabel[amount]; 
       jlb_Usernames = new JLabel[amount]; 
       jlb_Passwords = new JLabel[amount]; 

       for (int i = 0; i < amount; i++) { 
        locations[i] = input.next(); 
        jlb_Locations[i] = new JLabel(locations[i]); 
        usernames[i] = input.next(); 
        jlb_Usernames[i] = new JLabel(usernames[i]); 
        passwords[i] = input.next(); 
        jlb_Passwords[i] = new JLabel(passwords[i]); 
       } 
      } 
     } 
    } 

    public void addInformation(String info1, String info2, String info3) { 
     if (amount == 0) { 
      amount++; 
      locations = new String[amount]; 
      usernames = new String[amount]; 
      passwords = new String[amount]; 
      jlb_Locations = new JLabel[amount]; 
      jlb_Usernames = new JLabel[amount]; 
      jlb_Passwords = new JLabel[amount]; 
      locations[0] = info1; 
      usernames[0] = info2; 
      passwords[0] = info3; 
      jlb_Locations[0] = new JLabel(locations[0]); 
      jlb_Usernames[0] = new JLabel(usernames[0]); 
      jlb_Passwords[0] = new JLabel(passwords[0]); 
     } else { 
      String temp1[] = new String[amount]; 
      String temp2[] = new String[amount]; 
      String temp3[] = new String[amount]; 

      for (int i = 0; i < amount; i++) { 
       temp1[i] = locations[i]; 
       temp2[i] = usernames[i]; 
       temp3[i] = passwords[i]; 
      } 

      amount++; 

      locations = new String[amount]; 
      usernames = new String[amount]; 
      passwords = new String[amount]; 

      jlb_Locations = new JLabel[amount]; 
      jlb_Usernames = new JLabel[amount]; 
      jlb_Passwords = new JLabel[amount]; 

      for (int i = 0; i < temp1.length; i++) { 
       locations[i] = temp1[i]; 
       usernames[i] = temp2[i]; 
       passwords[i] = temp3[i]; 

       jlb_Locations[i] = new JLabel(temp1[i]); 
       jlb_Usernames[i] = new JLabel(temp2[i]); 
       jlb_Passwords[i] = new JLabel(temp3[i]); 
      } 

      locations[amount-1] = info1; 
      usernames[amount-1] = info2; 
      passwords[amount-1] = info3; 

      jlb_Locations[amount-1] = new JLabel(info1); 
      jlb_Usernames[amount-1] = new JLabel(info2); 
      jlb_Passwords[amount-1] = new JLabel(info3); 
     } 
    } 

    @Override 
    public void mouseReleased(MouseEvent e) { 
     int y = e.getY(); 
     if (y > 25 && y < (amount * 20) + 25) { 
      for (int i = 0; i < amount; i++) { 
       if (y < (i*20) + 45) { 
        edit = true; 
        editLine = i; 
        jtf_Location.setText(locations[i]); 
        jtf_Username.setText(usernames[i]); 
        jtf_Password.setText(passwords[i]); 
        removeMainUI(); 
        addLocationUI(); 
       } 
      } 
     } 
    } 

    @Override 
    public void mouseClicked(MouseEvent me) { 
    } 

    @Override 
    public void mousePressed(MouseEvent me) { 
    } 

    @Override 
    public void mouseEntered(MouseEvent me) { 
    } 

    @Override 
    public void mouseExited(MouseEvent me) { 
    } 
} 
+0

В: У вас есть класс «PISavior» в пакете «pisavior» в вашем файле Jar? – paulsm4

+0

Когда я скомпилирую его, он просто создает файл pisavior.jar. Мне нужно поместить этот файл и файл .class в папку на молнии вместе? –

+0

Есть много факторов: это просто вопрос: а) сколько вы знаете, и б) сколько Eclipse делает для вас автоматически. Я считаю, что Eclipse выполнит * большую часть работы за вас. Похоже, что у вас есть (автоматически сгенерированный) «манифест», и он определяет «pisavior.PISavior» как ваш основной класс. Я * надеюсь, что вы * имеете * класс «PISavior» в своем проекте. Я также надеюсь, что PISavior имеет метод «static void Main()». – paulsm4

ответ

3

Для начала, когда вы экспортируют банку, как, что вы не получите банки Lib в него. Вы должны добавить плагин fat-jar к Eclipse, тогда это легко.

Правый щелчок на проекте и выберите построить жира-банку enter image description here

После этого вы будете идти на скриншоте ниже - (Выберите ваш главный класс) enter image description here

Тогда -

enter image description here

Теперь у вас будет вся ваша библиотека, включенная в ваш файл .jar.

+0

[1]: http://i.stack.imgur.com/1eDin.png [2]: http://i.stack.imgur.com/1eDin.png [3]: http: //i.stack .imgur.com/1eDin.png [4]: ​​http://i.stack.imgur.com/1eDin.png Я выполнил ваши инструкции, как показано выше, но безрезультатно.Мой компьютер братьев не смог найти файл основного класса. Что странно. Существует статический основной класс, который легко доступен. –

+0

работает ли на вашем компьютере? – Chan

+0

да, все работает на моем компьютере –

0

Посмотрите на this

В основном вы должны указать свой основной класс в вашем META-INF папку файла банку.

1

Я думаю, что Eclipse 3.5 обладает этой способностью, чтобы экспортировать jar, упакованные со всеми зависимостями. В зависимости от сложности вашей настройки, в некоторых случаях это может не сработать. Сначала попробуйте попробовать, так как он уже существует.

Файл -> Экспорт ... Runnable JAR файла ... Пакет необходимых библиотек в генерируемой JAR

0

Вы должны экспортировать ваш проект без файла класса. На другой машине снова создайте свой проект и запустите его. Но не забудьте указать перед запуском процесса Jcl для JDK по умолчанию для Eclipse.

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