所以这个源代码来自这个网站。 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
答案 0 :(得分:2)
您可能遇到此问题,因为您尝试将Applet作为应用程序运行。 Applet不包含主要方法,应用程序可以。如果要将Applet作为应用程序运行,只需添加does the following:
的main
方法
答案 1 :(得分:0)
这是一个applet,它不需要main方法,因为它有init()。将其编译为applet,而不是程序(如果你正在使用eclipse,那就是)。
编辑:在命令行中,您将在.class文件中使用“appletviewer”命令。
答案 2 :(得分:0)
除了其他答案之外说作为小程序运行。示例代码中的主要方法关闭得太晚了,所有其他方法都被示例中的main方法包含在内,老实说我看不出它如何编译它的当前状态。结束init()注释后删除main方法和关闭大括号。