2012-06-04 57 views
3

我一直在netbeans和eclipse上都遇到這個問題,即使有一個簡單的文件,它顯示一個帶有jlabel的jframe。我的netbeans的項目屬性清楚地將tests2.hihi設置爲我的Main類,並且我已經清理並構建它,它會在我的dist文件夾中生成一個.jar文件。當我雙擊它時,它會提示我「找不到主類,程序將退出」。但是,如果我選擇從命令提示符「java -jar hello2.jar」運行它,它將正常運行!.jar文件一直給我「找不到主類」。程序將退出

這是.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 
} 
+2

你的清單文件是什麼樣的?你指定一個主類嗎? –

+0

聽起來像用於執行.jar文件的shell規則可能是borked。你在運行什麼操作系統? –

+0

@Ted Hopp我正在運行windows vista.May我知道你指的是哪個清單文件?在.jar裏面或者在項目主文件夾裏面的那個(對不起,我仍然是這個的初學者)。無論如何,我正在使用netbeans,並且我已經指定主類爲testing2.hihi,在項目屬性的運行選項卡下。感謝你的幫助! – Laughy

回答

3

我懷疑爲Jar文件註冊的打開命令設置不正確。這裏有一個方法來檢查命令行(至少在Windows 7;我敢肯定它工作在Windows Vista上):

  1. 輸入以下命令:assoc .jar
  2. 它應該打印.jar=jarfile。如果找不到(極不可能,鑑於您的症狀),請使用命令assoc .jar=jarfile創建條目。
  3. 輸入以下命令:ftype jarfile
  4. 應該打印出類似這樣
    "C:\Program Files\Java\jre6\bin\javaw.exe" -jar "%1" %*
    如果沒有定義或打印錯誤值(以javaw.exe的路徑可能是您的機器上的不同)
  5. ,修復它具有:
    ftype jarfile="C:\Program Files\Java\jre6\bin\javaw.exe" -jar "%1" %*

您可能需要重新啓動,或者至少打開一個新的Windows資源管理器窗口,看是否在.jar文件雙擊現在的工作秒。

+1

嗨,非常感謝!這工作正常,但我的jre是jre7。很明顯,我的問題發生是因爲我的jdk是1.7,我的jre設置爲1.6。是否可以將我的應用程序設置爲在較舊版本的jre上運行? – Laughy

+0

@Laughy - 在Eclipse中,可以在項目屬性 - > Java編譯器下將合規性級別設置爲6。在NetScape中,在項目屬性 - >源文件下,將源/二進制格式設置爲JDK 6。 –

0

請檢查您的環境變量,您的JAVA_HOME,CLASS_PATH和PATH設置。你可以在cmd窗口中回顯%JAVA_HOME%來檢查它。確保你的設置是正確的。

+0

我是否將echo%JAVA_HOME%輸入到cmd ?我如何知道我的設置是否正確?謝謝! – Laughy

0

特德霍普的答案是正確的,但我會改變在不同情況下的東西。如果你已經設置了Java的系統環境變量「路徑」的路徑,你可以把這個命令提示符:

  1. assoc命令的.jar = jar文件

  2. FTYPE jar文件= javaw.exe的罐子% 1%*

因爲如果你把整個JRE路徑,你必須每次更新JRE的時間做一遍。在這種情況下,您只需要更改環境變量,系統就會完成剩下的工作。

相關問題