Java 小程序未在JCreator小程序查看器中显示抽绳

Java 小程序未在JCreator小程序查看器中显示抽绳,java,applet,jcreator,Java,Applet,Jcreator,我的小程序代码编译得很好,但是每次我都会收到“小程序启动”消息。请不要劝阻我使用AWT或小程序。我只是想完成我的任务。目前,我的代码是: 主要方法 import java.awt.*; import java.awt.event.*; public class Lab33ast { public static void main(String[] args) { Frame frame = new Frame("Lab33ast"); frame.a

我的小程序代码编译得很好,但是每次我都会收到“小程序启动”消息。请不要劝阻我使用AWT或小程序。我只是想完成我的任务。目前,我的代码是:

主要方法

import java.awt.*;
import java.awt.event.*;


public class Lab33ast
{

public static void main(String[] args)
    {
        Frame frame = new Frame("Lab33ast");
        frame.add(new GfxApp());
        frame.setSize(100, 750);
        frame.addWindowListener(new WindowAdapter()  {public void
        windowClosing(WindowEvent e) {System.exit(0);}});
        frame.setVisible(true);
    }
}
继续,我在一个单独的文件中有一个绘制方法。GfxApp

import java.awt.*;

public class GfxApp extends Panel
{

    private int td = 200;       //Time Delay on graphics

    public void paint(Graphics g)
    {

        g.setFont(new Font("Arial", Font.BOLD, 28));
        g.drawString("Lab 33A 80/100 POINT VERSUIN", 300, 50);
        g.setFont(new Font("Arial", Font.BOLD, 20));
        g.drawString("DRAWING A LINKED LIST AS A STACK", 50, 215);
        g.drawString("DRAWING A LINKED LIST AS A QUEUE", 50, 415);
        drawStack(g);
        drawQueue(g);

    }


    public void drawStack(Graphics g) 
    {
        g.setFont(new Font("ARIAL", Font.BOLD, 20));
    }


    public void drawQueue(Graphics g)
    {
        g.setFont(new Font("ARIAL", Font.BOLD, 20));
    }
}
接下来,我有一个名为GfxNode的文件,老师让我们在没有进一步说明的情况下添加该文件

    import java.awt.*;


    public class GfxNode
    {
        private int x;                  // x coordinate of node
        private int y;                  // y coordinate of node
        private final int width;        // width of the gfx node
        private final int height;       // heigth of the gfx node
        private final int time;         // delay time between displays


    // GfxNode constructor instantiates an object and
    // stores its Top-Left coordinate (tlx,tly) information, as
    // well as the length and width of the node object.  A node object
    // with two fields is drawn at the specified coordinate.
        public GfxNode(Graphics g, int tlx, int tly, char ltr, int clr, int dt) 
        {
            x = tlx;
            y = tly;
            width = 30;
            height = 15;
            time = dt;
            drawNode(g,clr);
            drawPointer(g,ltr,1,clr);
        }


    // Method drawNode is a private helper method to draw linked list nodes.
    // This method draws a node with two fields at a location of the
    // Top-Left coordinate information in the current object.
    private void drawNode(Graphics g, int clr)
    {
        g.setColor(getColor(clr));
        g.drawRect(x,y,width,height);
        g.drawLine(x+height,y,x+height,y+height);
        delay(time);
    }


    // Method getColor a private helper method to make it easier to use colors
    // in a graphics program.   
    private Color getColor(int clr)
    {
        Color temp = Color.white;
        switch (clr)
        {
            case 0:  temp = Color.black;    break;
            case 1:  temp = Color.red;      break;
            case 2:  temp = Color.green;    break;
            case 3:  temp = Color.blue;     break;
            case 4:  temp = Color.orange;   break;
            case 5:  temp = Color.cyan;     break;
            case 6:  temp = Color.magenta;  break;
            case 7:  temp = Color.yellow;   break;
            case 8:  temp = Color.pink;     break;
            case 9:  temp = Color.white;    break;
        }
        return temp;
    }


    // Method getX returns the top-left X-coordinate of a linked list node.
    public int getx()
    { 
        return x; 
    }


// Method getY returns the top-left Y-coordinate of a linked list node.
public int gety()
{
    return y;
}


// Method drawPointer draws a vertical pointer down to an existing node.
// The first pointer to a node uses OffSet value 1 and the second
// pointer to the same node uses OffSet value 2.  The result is that
// the second pointer is moved farther to the right.
public void drawPointer(Graphics g, char ltr, int offSet, int clr) 
{
    if (offSet == 1)
        offSet = 8;
    else
        offSet = 18;
    int x1 = x + offSet;
    int y1 = y - 20;
    int x2 = x1;
    int y2 = y - 2;
    g.setColor(getColor(clr));
    g.drawLine(x1,y1,x2,y2);
    g.drawLine(x2,y2,x2-3,y2-3);
    g.drawLine(x2,y2,x2+3,y2-3);
    drawLetter(g,ltr,x+offSet-4,y-32);
    delay(time);
}


// Method enterData draws a letter in the Data field of the GfxNode.
public void enterData(Graphics g, char ltr, int clr) 
{
    g.setColor(getColor(clr));
    drawLetter(g,ltr,x+3,y+3);  
    delay(time);
}


// Method drawLink draws a link from the current sourceNode to the
// endNode in the specified color (clr).    
public void drawLink(Graphics g, GfxNode endNode, int clr) 
{
    int x1,x2;
    int y1 = this.gety()  + height/2;
    int y2 = endNode.gety() + height/2;
    g.setColor(getColor(clr));
    if (this.getx() < endNode.getx())
    {
        x1 = this.getx() + 22;
        x2 = endNode.getx() - 2;
        g.drawLine(x1,y1,x2,y2);
        g.drawLine(x2,y2,x2-3,y2-3);
        g.drawLine(x2,y2,x2-3,y2+3);
    }
    else
    {
        x1 = endNode.getx() + 8;
        x2 = this.getx() + width + 2;
        g.drawLine(x1,y1,x2,y2);
        g.drawLine(x1,y1,x1-3,y1-3);
        g.drawLine(x1,y1,x1-3,y1+3);
    }
    delay(time);
}


// Method drawNull draws a diagonal g.drawLine in the Next
// field of a list node, to indicate a NULL value.
public void drawNull(Graphics g, int clr)
{
    g.setColor(getColor(clr));
    g.drawLine(x+height+1,y+1,x+width-1,y+height-1);
    delay(time);
}


//  Method drawLetter upper-case Letter characters.  The characters
//  are drawn in a 9x9 pixel box.
//  The (x,y) parameters indicate the coordinate of the top-left corner
//  of the box.  Only capital letters and numbers are drawn.
public void drawLetter(Graphics g, char ltr, int x, int y) 
{
    switch (ltr)
    {
        case 'A' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x+8,y,x+8,y+8);
            g.drawLine(x,y,x+8,y);
            g.drawLine(x,y+4,x+8,y+4);
            break;
        case 'B' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x,y,x+5,y);
            g.drawLine(x,y+8,x+5,y+8);
            g.drawLine(x,y+4,x+5,y+4);
            g.drawLine(x+5,y,x+8,y+2);
            g.drawLine(x+5,y+8,x+8,y+6);
            g.drawLine(x+5,y+4,x+8,y+2);
            g.drawLine(x+5,y+4,x+8,y+6);
            break;
        case 'C' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x,y,x+8,y);
            g.drawLine(x,y+8,x+8,y+8);
            break;
        case 'D' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x,y,x+4,y);
            g.drawLine(x,y+8,x+4,y+8);
            g.drawLine(x+4,y,x+8,y+4);
            g.drawLine(x+4,y+8,x+8,y+4);
            break;
        case 'E' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x,y,x+8,y);
            g.drawLine(x,y+8,x+8,y+8);
            g.drawLine(x,y+4,x+6,y+4);
            break;
        case 'F' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x,y,x+8,y);
            g.drawLine(x,y+4,x+6,y+4);
            break;
        case 'G' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x,y,x+6,y);
            g.drawLine(x,y+8,x+8,y+8);
            g.drawLine(x+8,y+8,x+8,y+4);
            g.drawLine(x+8,y+4,x+4,y+4);
            break;
        case 'H' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x+8,y,x+8,y+8);
            g.drawLine(x,y+4,x+8,y+4);
            break;
        case 'I' :
            g.drawLine(x,y,x+8,y);
            g.drawLine(x,y+8,x+8,y+8);
            g.drawLine(x+4,y,x+4,y+8);
            break;
        case 'J' :
            g.drawLine(x+8,y,x+8,y+8);
            g.drawLine(x,y+8,x+8,y+8);
            g.drawLine(x,y+8,x,y+4);
            break;
        case 'K' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x+8,y,x+1,y+4);
            g.drawLine(x+8,y+8,x+1,y+4);
            break;
        case 'L' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x,y+8,x+8,y+8);
            break;
        case 'M' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x+8,y,x+8,y+8);
            g.drawLine(x,y,x+5,y+5);
            g.drawLine(x+8,y+1,x+4,y+4+1);
            break;
        case 'N' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x+8,y,x+8,y+8);
            g.drawLine(x,y,x+9-1,y+8);
            break;
        case 'O' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x+8,y,x+8,y+8);
            g.drawLine(x,y,x+8,y);
            g.drawLine(x,y+8,x+8,y+8);
            break;
        case 'P' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x,y,x+8,y);
            g.drawLine(x,y+4,x+8,y+4);
            g.drawLine(x+8,y,x+8,y+4);
            break;
        case 'Q' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x+8,y,x+8,y+8);
            g.drawLine(x,y,x+8,y);
            g.drawLine(x,y+8,x+8,y+8);
            g.drawLine(x+3,y+5,x+8,y+10);
            break;
        case 'R' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x,y,x+8,y);
            g.drawLine(x,y+4,x+8,y+4);
            g.drawLine(x+8,y,x+8,y+4);
            g.drawLine(x,y+4,x+9,y+8);
            break;
        case 'S' :
            g.drawLine(x,y,x+8,y);
            g.drawLine(x,y+4,x+8,y+4);
            g.drawLine(x,y+8,x+8,y+8);
            g.drawLine(x,y,x,y+4);
            g.drawLine(x+8,y+4,x+8,y+8);
            break;
        case 'T' :
            g.drawLine(x,y,x+8,y);
            g.drawLine(x+4,y,x+4,y+8);
            break;
        case 'U' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x+8,y,x+8,y+8);
            g.drawLine(x,y+8,x+8,y+8);
            break;
        case 'V' :
            g.drawLine(x,y,x+4,y+8);
            g.drawLine(x+8,y,x+4,y+8);
            break;
        case 'W' :
            g.drawLine(x,y,x,y+8);
            g.drawLine(x+8,y,x+8,y+9-1);
            g.drawLine(x,y+8,x+4,y+4);
            g.drawLine(x+8,y+8,x+4,y+4);
            break;
        case 'x' :
            g.drawLine(x,y,x+9,y+8);
            g.drawLine(x,y+8,x+8,y);
            break;
        case 'y' :
            g.drawLine(x,y,x+5-1,y+4);
            g.drawLine(x+8,y,x+4,y+4);
            g.drawLine(x+4,y+4,x+4,y+8);
            break;
        case 'Z' :
            g.drawLine(x,y,x+8,y);
            g.drawLine(x,y+8,x+8,y+8);
            g.drawLine(x+8,y,x,y+8);
            break;
        default :
            g.fillRect(x,y,8,8);
    }

}


    // Method delay allows viewing the sequence in which the linked lists are drawn/
    private void delay(double n)
    {
        for (double k = 1; k < n; k+=0.00001);
    }


}
我的html

<html>
    <head>
    </head>
    <body bgcolor="000000">
        <center>
            <applet
                code    = "Lab33ast.class"
                width   = "500"
                height  = "300"
                >
            </applet>
        </center>
    </body>
</html>


如果有人能给出具体和详细的解决方案,我将不胜感激。

您的代码中没有
Applet
(没有任何扩展自
Applet

一般来说,您应该从一个不同的容器类开始,可能是
Panel
(因为您生活在AWT的黑暗时代),将您的所有逻辑都放在这个类中

然后,在需要时,创建
Frame
的实例,或者创建一个从
Applet
扩展的类,并向其中添加面板的实例

除非你有一个主要的驱动原因,否则我会避免以这种方式直接使用AWT,并且会使用Swing,Swing在16年前取代了AWT,所以你可能会得到更好的社区支持。有关更多详细信息,请参阅

由于现在大多数浏览器都在积极阻止小程序,我也怀疑它们在这里的使用

错过了“请不要劝阻我使用AWT或小程序”免责声明


我看到了扩展小程序的逻辑。我只是不知道把“扩展小程序”部分放在哪里。当我更改从GfxApp扩展的内容时,我在main方法中收到许多错误,最常见的错误是“gfx.addWindowListener(new WindowAdapter()”。我的IDE说它找不到符号

将核心逻辑移到基于
面板的类中

import java.awt.Font;
import java.awt.Graphics;
import java.awt.Panel;

public class GfxApp extends Panel {

    private int td = 200;       //Time Delay on graphics

    public void paint(Graphics g) {

        g.setFont(new Font("Arial", Font.BOLD, 28));
        g.drawString("Lab 33A 80/100 POINT VERSUIN", 300, 50);
        g.setFont(new Font("Arial", Font.BOLD, 20));
        g.drawString("DRAWING A LINKED LIST AS A STACK", 50, 215);
        g.drawString("DRAWING A LINKED LIST AS A QUEUE", 50, 415);
        drawStack(g);
        drawQueue(g);

    }

    public void drawStack(Graphics g) {
        g.setFont(new Font("ARIAL", Font.BOLD, 20));
    }

    public void drawQueue(Graphics g) {
        g.setFont(new Font("ARIAL", Font.BOLD, 20));
    }
}
创建一个从
Applet
扩展的
类,向其添加
GfxApplet
的实例

import java.applet.Applet;

public class GfxApplet extends Applet {

    @Override
    public void init() {
        super.init();
        GfxApp app = new GfxApp();
        add(app);
    }

}
更改小程序html代码以指向它

<html>
    <head>
    </head>
    <body bgcolor="000000">
        <center>
            <applet
                code    = "GfxApplet.class"
                width   = "500"
                height  = "300"
                >
            </applet>
        </center>
    </body>
</html>

这是良好管理用户界面代码的基础。

公平地说,这个问题意味着这是一项家庭作业,尽管我大体上同意你的观点。@paisanco Yeah错过了基本免责声明。也许我应该和似乎与现实失去任何联系的讲师谈谈。我看到了扩展小程序的逻辑。我只是不知道将“扩展小程序”部分放在哪里。当我更改从GfxApp扩展的内容时,我在主方法中收到许多错误,最常见的错误是“gfx.addWindowListener(new WindowAdapter()”。我的IDE说它找不到符号。
Applet
不是“窗口”,它没有被关闭的概念。小程序是由浏览器/applet插件/applet容器构建和管理的。我的观点是,你不需要
Lab33ast
applet
标签的
code
属性应该指向你的
GfxApp
,如果我看起来很无知,请原谅。我没有学到多少h与我的导师一起。我将您提供的主要方法复制粘贴到
33ast
中。我是否将
GfxApplet
类添加到与
GfxApp
相同的文件中?还是为其创建不同的文件?我已尝试了这两种方法,并收到了
公共类GfxApplet extensed Applet
中的
找不到符号
错误uper.init();
添加(应用程序);
<html>
    <head>
    </head>
    <body bgcolor="000000">
        <center>
            <applet
                code    = "GfxApplet.class"
                width   = "500"
                height  = "300"
                >
            </applet>
        </center>
    </body>
</html>
public static void main(String[] args) {
    Frame frame = new Frame("Lab33ast");
    frame.add(new GfxApp());
    frame.setSize(100, 750);
    frame.addWindowListener(new WindowAdapter() {
        public void
                windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
    frame.setVisible(true);
}