2011-12-22 113 views
-1

我通過谷歌和各種論壇搜索過,(也是這個)。罐子不在命令行上運行

我創建了一個應用程序,一個java基準測試,並且想創建一個可運行jar文件,以便在其他機器上使用該程序。不幸的是,該jar不工作,一切都完成與代碼來創建jar文件,該程序運行命令行。我試着在這個論壇上找到的技巧來修復我的jar的創建,但它並沒有工作。

奇怪的是,當我編譯JavaBenchmark.java文件我不明白只有一個文件(JavaBenchmark.class),也JavaBenchmark $ 1.class:O(任何人都知道這是爲什麼?)

所以我問你檢查我的代碼,如果有可能會有一些問題,我必須說它的GUI應用程序。

import java.io.*; 
import java.util.Date; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
public class JavaBenchmark implements ActionListener 
{ 
    private Frame mainWindow; 
    private Button exit; 
    private String dateAndTime; 
    private TextArea values; 
    private String stringMaxMemory; 
    private String stringFreeMemory; 
    private String stringTotalFreeMemory; 
    private String stringAllocatedMemory; 

    public JavaBenchmark(String s) 
    { 
     Date myDate = new Date(); 
     dateAndTime = String.format("%tA, %<tF", myDate); 

     File[] roots = File.listRoots(); 

     mainWindow = new Frame(s); 
     mainWindow.setSize(640,480); 
     mainWindow.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent we){System.exit(0);}}); 

     String version = System.getProperty("java.version"); 
     String jvmversion = System.getProperty("java.jvm.version"); 
     String checkedJvmVersion; 
     if (jvmversion == null) 
     { 
      checkedJvmVersion = "Java Virtual Machine version: N/A"; 
     } 
     else 
     { 
      checkedJvmVersion = "Java Virtual Machine version: " + jvmversion; 
     } 
     String jvmname = System.getProperty("java.vm.name"); 
     String osname = System.getProperty("os.name"); 
     String osarchitecture = System.getProperty("os.arch"); 
     String osversion = System.getProperty("os.version"); 
     String processor = System.getenv("PROCESSOR_IDENTIFIER"); 
     int processorCores = Runtime.getRuntime().availableProcessors(); 

     Runtime runtime = Runtime.getRuntime(); 
     double freeMemory = runtime.freeMemory(); 
     double allocatedMemory = runtime.totalMemory(); 
     double maxMemory = runtime.maxMemory(); 
     double totalFreeMemory = (freeMemory + (maxMemory - allocatedMemory)); 
     stringFreeMemory = String.format("%5.2f", (freeMemory)/1024/1024); 
     stringAllocatedMemory = String.format("%5.2f", (allocatedMemory)/1024/1024); 
     stringMaxMemory = String.format("%5.2f", (maxMemory)/1024/1024); 
     stringTotalFreeMemory = String.format("%5.2f", (totalFreeMemory)/1024/1024); 

     exit = new Button("Exit"); exit.addActionListener(this); 
     values = new TextArea(30, 120); 

    Panel exitButton = new Panel(); 

    exitButton.add(exit); 

    mainWindow.add(values, "North");   
    mainWindow.add(exitButton); 

    values.append("Your Java benchmark, as on: " + dateAndTime + "\n\n"); 
    values.append("Java version: " + version + "\n"); 
    values.append("Java Virtual machine version: " + checkedJvmVersion + "\n"); 
    values.append("Java Virtual Machine name: " + jvmname + "\n"); 
    values.append("\n"); 
    values.append("Operating System: " + osname + "\n" + osarchitecture + " os version: " + osversion + "\n"); 
    values.append("\n"); 
    values.append("Processor: " + processor + " (number of cores: " + processorCores + ")\n"); 
    values.append("\n"); 
    values.append("Memory info: \n"); 
    values.append("Maximum RAM memory for JVM:  " + stringMaxMemory + " Mb\n"); 
    values.append("Allocated RAM memory for JVM:  " + stringAllocatedMemory + " Mb\n"); 
    values.append("Free RAM memory for JVM:  " + stringFreeMemory + " Mb\n"); 
    values.append("Total free RAM memory for JVM:  " + stringTotalFreeMemory + " Mb\n\n\n"); 
    values.append("HardDrive, and VirtualDrive details:\n"); 
    for (File root : roots) { 
      if (root.getTotalSpace() == 0) 
      { 
       continue; 
      } 
      else 
      { 
       values.append("Disk: " + root.getAbsolutePath() + " space allocation:\n"); 
       values.append("Total space :"); 
       values.append(String.format("%5.2f", Double.valueOf(root.getTotalSpace())/1024/1024/1024)); 
       values.append(" Gb\n"); 
       values.append("Free space : "); 
       values.append(String.format("%5.2f", Double.valueOf(root.getFreeSpace())/1024/1024/1024)); 
       values.append(" Gb\n"); 
       values.append("Occupied disk space : "); 
       values.append(String.format("%5.2f", Double.valueOf(root.getTotalSpace() - root.getFreeSpace())/1024/1024/1024)); 
       values.append(" Gb\n\n"); 

      } 
     } 

    mainWindow.pack();    //Creating the window 
    mainWindow.setLocationRelativeTo(null);   //true: position at (0,0)  false: position at center 
    mainWindow.setResizable(false);   //Intuitively known commands 
    mainWindow.setVisible(true);  //Intuitively known commands 
} 

public static void main(String[] args) 
{ 
    new JavaBenchmark("Display"); 
} 

public void actionPerformed(ActionEvent e) { 
    if(e.getSource()==exit) 
    { 
     System.exit(0); 
    } 
} 
} 
+2

這將是更好的,如果標題給你的問題是什麼有些淡淡的。 – 2011-12-22 16:45:14

+0

你是如何創建罐子的? – Shraddha 2011-12-22 16:45:25

+0

請在你的標題中更具體一些。像「我嘗試過所有的東西......」或「這根本行不通」的標題不提供任何有價值的信息,以及那些可以幫助你的人可能會以這樣的標題忽略你的問題。 – Paul 2011-12-22 16:48:12

回答

1

JavaBenchmark$1.class是您創建WindowAdapter當您添加窗口偵聽器的匿名類。至於罐子不工作,你必須描述你正在做什麼來創建罐子,以確定你的問題出在哪裏。有可能你只是發出錯誤的命令。

+0

要創建jar文件:jar -cvfm manifest.mf JavaBenchmark.class當我嘗試運行jar時顯示的錯誤是:找不到主要類:JavaBenchmark程序將退出 – Yakuman 2011-12-22 16:58:22

+0

我也發現該程序在其他機器上不起作用,即使JDK安裝在那裏,而是它會拋出很多例外,因爲很多分類都找不到 – Yakuman 2011-12-22 18:09:23

1

JavaBenchmark $ 1.class被定義爲匿名類如下:

new WindowAdapter(){public void windowClosing(WindowEvent we){System.exit(0);}}