2016-01-22 89 views
0

我有一個程序由於沒有找到某些庫而無法編譯。我曾嘗試使用-cp%pathTo \ lib%/ *命令來包含所有.jar文件。這讓它編譯,但是當我嘗試運行該程序時,它告訴我它無法找到或加載主類。確定使用哪個.jar文件

所以我想手動包含每個.jar文件,我唯一的問題是我不知道要包含哪些確切的.jar文件。

/* --------------------- 
* ThermometerDemo1.java 
* --------------------- 
* (C) Copyright 2002-2007, by Object Refinery Limited. 
* 
*/ 


import java.awt.BasicStroke; 
import java.awt.BorderLayout; 
import java.awt.Color; 

import javax.swing.JPanel; 
import javax.swing.JSlider; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.plot.ThermometerPlot; 
import org.jfree.data.general.DefaultValueDataset; 
import org.jfree.data.general.ValueDataset; 
import org.jfree.ui.ApplicationFrame; 
import org.jfree.ui.RectangleInsets; 

/** 
* A simple demonstration application showing how to create a thermometer. 
*/ 
public class ThermDemo extends ApplicationFrame { 

static class ContentPanel extends JPanel implements ChangeListener { 

    JSlider slider; 

    DefaultValueDataset dataset; 

    /** 
    * Default constructor. 
    */ 
    public ContentPanel() { 
     super(new BorderLayout()); 
     this.slider = new JSlider(0, 100, 50); 
     this.slider.setPaintLabels(true); 
     this.slider.setPaintTicks(true); 
     this.slider.setMajorTickSpacing(25); 
     this.slider.addChangeListener(this); 
     add(this.slider, BorderLayout.SOUTH); 
     this.dataset = new DefaultValueDataset(this.slider.getValue()); 
     add(new ChartPanel(createChart(this.dataset))); 
    } 

    private static JFreeChart createChart(ValueDataset dataset) { 
     ThermometerPlot plot = new ThermometerPlot(dataset); 
     JFreeChart chart = new JFreeChart(
      "Thermometer Demo 1", // chart title 
      JFreeChart.DEFAULT_TITLE_FONT, 
      plot,     // plot 
      true     // no legend 
     );    

     plot.setInsets(new RectangleInsets(5.0, 5.0, 5.0, 5.0)); 
     plot.setPadding(new RectangleInsets(10.0, 10.0, 10.0, 10.0)); 
     plot.setThermometerStroke(new BasicStroke(2.0f)); 
     plot.setThermometerPaint(Color.lightGray); 
     plot.setUnits(ThermometerPlot.UNITS_FAHRENHEIT); 
     plot.setGap(3); 
     return chart;  
    } 

    public void stateChanged(ChangeEvent e) { 
     this.dataset.setValue(new Integer(this.slider.getValue())); 
    } 

} 

/** 
* Creates a new demo. 
* 
* @param title the frame title. 
*/ 
public ThermDemo(String title) { 
    super(title); 
    JPanel chartPanel = createDemoPanel(); 
    setContentPane(chartPanel); 
} 

/** 
* Creates a panel for the demo (used by SuperDemo.java). 
* 
* @return A panel. 
*/ 
public static JPanel createDemoPanel() { 
    return new ContentPanel(); 
} 

/** 
* Starting point for the demonstration application. 
* 
* @param args ignored. 
*/ 
public static void main(String[] args) { 
    ThermDemo demo = new ThermDemo("Thermometer Demo 1"); 
    demo.pack(); 
    demo.setVisible(true); 
    } 

} 

命令:

編譯:javac的 -cp B:\程序\的Java \編譯\ lib中* ThermDemo.java

運行:JAVA ThermDemo

編譯後有是我當前目錄中的兩個新文件。 ThermDemo $ ContentPanel.class和ThermDemo.class

+0

向我們展示您正在運行的確切命令,並且請包含來自包含您要用作入口點的'main()'方法的類的代碼。 –

回答

3

編譯:javac的-cp B:\程序\的Java \編譯\ lib中* ThermDemo.java

運行:JAVA ThermDemo

修改成:

java -cp .;B:\Programming\Java\Compiler\lib* ThermDemo 

運行時類路徑需要包括(至少)所有的編譯時依賴。 「。」需要告訴java查看當前目錄以及...以查找剛剛編譯的「.class」文件。

實際上,此解決方案僅適用於您當前的問題。類路徑的工作方式有很多複雜性,因此建議您花時間閱讀它。這裏有一個很好的開始:(我假設ThermoDemo.javamain方法與適當的簽名)


+0

非常感謝! 爲什麼我需要重新包含.jar文件的路徑? 也是。使用命令,因爲除了編譯的主文件之外還有另一個.class文件? –

+0

爲什麼?因爲這是它的工作方式!編譯時類路徑不會記錄在編譯器發出的任何內容中。 –

+0

好的,那是我錯過的,再次感謝。 –

0

ThermDemo.class是你必須運行的課程。 ThermDemo$ContentPanel.class是內部類。當您編譯具有內部類的類時,將生成兩個類文件。

相關問題