Файл .jar продолжает давать мне «не удалось найти основной класс». Программа будет закрыта

У меня были проблемы с этим как в NetBeans, так и в Eclipse, даже с простым файлом, в котором отображается Jframe с Jlabel. В свойствах моего проекта netbeans явно указывается, что мой класс Main - test2.hihi, и я его очистил и собрал, который создает файл .jar в моей папке dist. Когда я дважды щелкаю по нему, появляется сообщение & quot; не мог найти основной класс. Программа закроется. & Quot; Однако, если я решу запустить его из командной строки & quot; java -jar hello2.jar & quot; это будет работать как обычно!

Это файл манифеста внутри файла .jar.

      Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.7.0_04-b20 (Oracle Corporation)
Class-Path: 
X-COMMENT: src/hihi
Main-Class: testing2.hihi



package testing2;

public class hihi extends javax.swing.JFrame {

/**
 * Creates new form hihi
 */
public hihi() {
    initComponents();
}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

    jLabel1 = new javax.swing.JLabel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jLabel1.setText("hihi");

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(50, 50, 50)
            .addComponent(jLabel1)
            .addContainerGap(334, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(33, 33, 33)
            .addComponent(jLabel1)
            .addContainerGap(253, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /*
     * Set the Nimbus look and feel
     */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /*
     * If Nimbus (introduced in Java SE 6) is not available, stay with the
     * default look and feel. For details see
     * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(hihi.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(hihi.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(hihi.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(hihi.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /*
     * Create and display the form
     */
    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new hihi().setVisible(true);
        }
    });
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
// End of variables declaration
}
 Stephen C04 июн. 2012 г., 05:18
В конечном счете, именно манифест в JAR имеет значение ... если вы выполняете JAR. Вы смотрели на это, чтобы проверить, что это правильно?
 Ted Hopp04 июн. 2012 г., 05:00
Похоже, что правило оболочки для выполнения файлов .jar может быть повреждено. Какую ОС вы используете?
 Laughy04 июн. 2012 г., 05:38
@StephenC Привет, я добавил файлы манифеста в мой блок кода выше. Мне кажется, все в порядке. Что-то не так с этим?
 Laughy04 июн. 2012 г., 05:03
@Ted Hopp Я использую Windows Vista. Могу ли я знать, на какой файл манифеста вы ссылаетесь? тот, что внутри .jar, или тот, что внутри главной папки проекта (извините, я еще новичок в этом). В любом случае я использую netbeans и указал основной класс для тестирования2.hihi на вкладке запуска свойств проекта. Спасибо за вашу помощь!
 Hovercraft Full Of Eels04 июн. 2012 г., 04:55
Как выглядит ваш файл манифеста? Вы указываете основной класс?

Ответы на вопрос(3)

Решение Вопроса

что команда open, зарегистрированная для файлов Jar, настроена неправильно. Вот способ проверить это из командной строки (по крайней мере, в Windows 7; я уверен, что он работает в Windows Vista):

Enter the command: assoc .jar It should print .jar=jarfile. If it is not found (highly unlikely, given your symptoms), create the entry with the command assoc .jar=jarfile. Enter the command: ftype jarfile It should print something like
"C:\Program Files\Java\jre6\bin\javaw.exe" -jar "%1" %*
(The path to javaw.exe might be different on your machine.) If it isn't defined or prints the wrong value, fix it with:
ftype jarfile="C:\Program Files\Java\jre6\bin\javaw.exe" -jar "%1" %*

Возможно, вам придется перезагрузить компьютер или, по крайней мере, открыть новое окно проводника Windows, чтобы проверить, работает ли теперь двойной щелчок по файлу .jar.

 04 июн. 2012 г., 08:51
@Laughy - в Eclipse вы можете установить уровень соответствия 6 в свойствах проекта - & gt; Компилятор Java. В NetScape в свойствах проекта - & gt; Источники, установите Source / Binary Format в JDK 6.
 Laughy04 июн. 2012 г., 08:13
Привет, спасибо большое! Это прекрасно работает, за исключением того, что мой JRE7. Очевидно, моя проблема возникает из-за того, что мой jdk равен 1.7, а мой jre установлен на 1.6. Можно ли настроить приложение для запуска на старых версиях jre?

но я бы кое-что изменил в разных случаях. Если вы уже установили путь Java в системной переменной среды "path", вы можете указать это в командной строке:

assoc .jar=jarfile

ftype jarfile=javaw.exe -jar %1 %*

'потому что, если вы указали полный путь JRE, вам придется делать это снова каждый раз, когда вы обновляете JRE. В этом случае вам нужно всего лишь изменить переменную среды, а система сделает все остальное.

Пожалуйста, проверьте переменные окружения, настройки JAVA_HOME, CLASS_PATH и PATH. Вы можете повторить% JAVA_HOME% в окне cmd, чтобы проверить это. убедитесь, что вы правильно установили.

 Laughy04 июн. 2012 г., 05:40
Я ввожу эхо% JAVA_HOME% в cmd? Как мне узнать, правильны ли мои настройки? Спасибо!

Ваш ответ на вопрос