为什么会出现缺少主要方法错误?

时间:2011-03-03 14:55:33

标签: java applet

所以这个源代码来自这个网站。 http://math.hws.edu/javamath/basic_applets/SliderGraph.html似乎有些陈旧,但我不知道这是不是问题。我真的很想写自己的小程序,但这正是我需要的,而且我的时间很短。代码编译好没有错误但出现在线程主java.lang.NoSuchMethodError中的异常:main为什么会发生这种情况?我应该在哪里添加主要方法?

import java.awt.*;
import edu.hws.jcm.data.*;
import edu.hws.jcm.draw.*;
import edu.hws.jcm.awt.*;

public class SliderGraph extends java.applet.Applet {



   private DisplayCanvas canvas;

   public void stop() {
      canvas.releaseResources();
   }

   JCMPanel makeSliderPanel(VariableSlider v) {
         // A small utility routing that makes a JCMPanel that contains
         // a VariableSlider and a DisplayLabel that shows the value
         // of the variable associated with that slider.
      JCMPanel p = new JCMPanel();
      p.add(v, BorderLayout.CENTER);
      p.add( new DisplayLabel(v.getName() + " = #", new Value[] { v } ), BorderLayout.EAST);
      return p;
   }


   public void init() {

      Parser parser = new Parser();
      Variable x = new Variable("x");
      parser.add(x);

        // Create the three VariableSliders.  In this case, the sliders have
        //   names.  There is also a Variable associated with each slider,
        //   which has the same name.  This variable is added to the parser
        //   which is passed as the fourth parameter to the constructor, making
        //   it possible to use "a", "b", and "c" in expressions parsed by the
        //   parser.  Adjusting the value on a slider changes the value of the
        //   associated variable, and therefore changes the value of any
        //   expression that refers to that variable.  The second and third
        //   parameters to the constructor give the minimum and maximum Values
        //   on the slider.  Passing "null,null" uses the defaults, namely
        //   new Constant(-5) and new Constant(5).
      VariableSlider a = new VariableSlider("a",null,null,parser);
      VariableSlider b = new VariableSlider("b",null,null,parser);
      VariableSlider c = new VariableSlider("c",null,null,parser);

      canvas = new DisplayCanvas();
      canvas.setHandleMouseZooms(true);
      canvas.add(new Panner());

      LimitControlPanel limits =
           new LimitControlPanel( LimitControlPanel.SET_LIMITS | LimitControlPanel.RESTORE
                                    | LimitControlPanel.EQUALIZE,  false);
      limits.addCoords(canvas);

      ExpressionInput input = new ExpressionInput("a*x^2 + b*x + c", parser);
      Graph1D graph = new Graph1D(input.getFunction(x));

      ComputeButton button = new ComputeButton("Graph it!");

      canvas.add(new Axes());
      canvas.add(graph);
      canvas.add(new DrawBorder(Color.darkGray, 2));

      JCMPanel main = new JCMPanel();  // Build interface out of JCMPanels!
      main.setInsetGap(3);
      main.add(canvas, BorderLayout.CENTER);
      main.add(limits, BorderLayout.EAST);
      JCMPanel bot = new JCMPanel(5,1);
      main.add(bot, BorderLayout.SOUTH);

      bot.add(new Label("Enter a function f(x), which can use the constants a, b, and c:"));
      JCMPanel inputPanel = new JCMPanel();
      bot.add(inputPanel);
      inputPanel.add(input, BorderLayout.CENTER);
      inputPanel.add(button, BorderLayout.EAST);

      bot.add( makeSliderPanel(a) );  // Create and add the sliders.
      bot.add( makeSliderPanel(b) );
      bot.add( makeSliderPanel(c) );

      Controller controller = main.getController();  // Set up error reporting.
      controller.setErrorReporter(canvas);
      limits.setErrorReporter(canvas);

      main.gatherInputs();  // Set up main panel to respond to changes in input objects.
                            // This works since the interface is built of JCMPanels.  For
                            // the same reason, I don't have to add the objects the the
                            // controller.

      button.setOnUserAction(controller);  // Set controller to respond to button.

      setBackground(Color.lightGray);
      setLayout(new BorderLayout());
      add(main,BorderLayout.CENTER);

   } // end init()

} // end class SliderGraph

3 个答案:

答案 0 :(得分:2)

您可能遇到此问题,因为您尝试将Applet作为应用程序运行。 Applet不包含主要方法,应用程序可以。如果要将Applet作为应用程序运行,只需添加does the following

main方法
  1. 创建一个窗口(JFrame)来保存小程序。
  2. 使窗口的关闭框停止小程序。
  3. 创建一个新的applet对象,并将其添加到窗口中。
  4. 通过调用init()启动applet,然后启动()。
  5. 完成布局。
  6. 使窗口(包含applet)可见。

答案 1 :(得分:0)

这是一个applet,它不需要main方法,因为它有init()。将其编译为applet,而不是程序(如果你正在使用eclipse,那就是)。

编辑:在命令行中,您将在.class文件中使用“appletviewer”命令。

答案 2 :(得分:0)

除了其他答案之外说作为小程序运行。示例代码中的主要方法关闭得太晚了,所有其他方法都被示例中的main方法包含在内,老实说我看不出它如何编译它的当前状态。结束init()注释后删除main方法和关闭大括号。