繁体   English   中英

我的Java小程序没有出现

[英]My java applet isn't appearing

我不知道为什么,但是什么也没出现?

我想有一个小房子。

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.*;


public class color extends JApplet
{
    public void init()
    {
        addMouseListener(new MyMouseListener());
        getContentPane().setBackground(Color.white);
    }
    public class MyMouseListener implements MouseListener
    {
    public void mouseClicked(MouseEvent e) 
    {
           int x = e.getX();
           int y = e.getY();
           boolean closeDoors = true;

           if(x>330 && x<280 && y>20 && y<20)
           {
               closeDoors = false;
               repaint();

           }

    }
    public void mouseEntered(MouseEvent e) { }
    public void mouseExited(MouseEvent e) { }
    public void mousePressed(MouseEvent e) { }
    public void mouseReleased(MouseEvent e) { }
    }
    public void paint ( Graphics g, boolean closeDoors)
           {
                super.paint (g);

                do
                {
               g.drawLine (35, 50, 570, 50);
                g.drawLine (35, 50, 250, 0);
                g.drawLine (250, 0, 570, 50);
                g.drawRect (50, 50, 500, 350);
                g.fillRect (100, 75, 80, 80);
                g.fillRect (400, 75, 80, 80);
                g.fillRect (240, 200, 125, 200);
                }
                 while (closeDoors = true);

                 if (closeDoors = false);
                {
                g.drawLine (35, 50, 570, 50);
                g.drawLine (35, 50, 250, 0);
                g.drawLine (250, 0, 570, 50);
                g.drawLine (180, 120, 100, 120);
                g.drawLine (400, 120, 480, 120);
                g.drawLine (140, 75, 140, 160);
                g.drawLine (450, 75, 450, 160);
                g.drawRect (50, 50, 500, 350);
                g.drawRect (100, 75, 80, 80);
                g.drawRect (400, 75, 80, 80);
                g.drawRect (240, 200, 125, 200);
                g.drawOval (330,280, 20, 20);
                }
            }
}

您可能在paint方法内部循环。 那里似乎无限循环。

 do
 {
   g.drawLine (35, 50, 570, 50);
   g.drawLine (35, 50, 250, 0);
   g.drawLine (250, 0, 570, 50);
   g.drawRect (50, 50, 500, 350);
   g.fillRect (100, 75, 80, 80);
   g.fillRect (400, 75, 80, 80);
   g.fillRect (240, 200, 125, 200);
 } while (closeDoors = true);

我将其替换为:

 if (closeDoors = true)
 {
   g.drawLine (35, 50, 570, 50);
   g.drawLine (35, 50, 250, 0);
   g.drawLine (250, 0, 570, 50);
   g.drawRect (50, 50, 500, 350);
   g.fillRect (100, 75, 80, 80);
   g.fillRect (400, 75, 80, 80);
   g.fillRect (240, 200, 125, 200);
 }

我会尽力帮助您步入正轨:-)

您可能已经知道这一点,但是如果您不使用IDE,建议您使用appletviewer来开发applet,而不要使用浏览器。 只是值得深思的:-)

首先, Toader Mihai Claudiu的建议是正确的。 更改

            do
            {
           g.drawLine (35, 50, 570, 50);
            g.drawLine (35, 50, 250, 0);
            g.drawLine (250, 0, 570, 50);
            g.drawRect (50, 50, 500, 350);
            g.fillRect (100, 75, 80, 80);
            g.fillRect (400, 75, 80, 80);
            g.fillRect (240, 200, 125, 200);
            }
             while (closeDoors = true);

             if (closeDoors = false);
            {

进入

            if (closeDoors)
            {
           g.drawLine (35, 50, 570, 50);
            g.drawLine (35, 50, 250, 0);
            g.drawLine (250, 0, 570, 50);
            g.drawRect (50, 50, 500, 350);
            g.fillRect (100, 75, 80, 80);
            g.fillRect (400, 75, 80, 80);
            g.fillRect (240, 200, 125, 200);
            }
            else
            {

否则,只要closeDoors为true,就将进行绘画。 您只需要涂一次即可。 Java会要求您在必要时再次绘画(例如,当您调用repaint()时)。

另外,将closeDoors设置为成员变量。 换句话说,具有:

public class color extends JApplet
{
  public boolean closeDoors = false;

当您在点击侦听器中切换closeDoors的值时,可以将其简化为:

       int x = e.getX();
       int y = e.getY();

       if(x>330 && x<280 && y>20 && y<20)
       {
           closeDoors = !closeDoors;
           repaint();

       }

当您单击特定区域时,这将反转closeDoors的值。 换句话说,如果closeDoorstrue ,它将设置为false ,反之亦然。

请注意,您的代码if(x>330 && x<280 && y>20 && y<20)可能根本无法工作,因为y不能同时大于20和小于20。 我将让您使用它来找出有效的方法:-)。

希望这可以帮助。


只是一个小细节,但是您可能应该调用类Color而不是color来遵循Java的标准命名约定 ,或者如果您不想与java.awt.Color冲突,则可以使用其他名称。

通常,在Swing中,您永远不要覆盖paint()方法,而应该重写paintComponent (不过,我不确定JApplet –我会在applet内的JPanel上绘制,而不是applet本身。)

而且您的绘画方法中没有无止境的循环-正如Toader已经说过的那样,它应该迅速返回,而不是永远起作用。

但这似乎不是您的问题,就像您在评论中写道:

我得到小程序未初始化

将此类(重要!)信息添加到问题中(您知道,它有一个编辑链接是有原因的)。

您的浏览器应该在某个地方有一个Java控制台,请使用它,然后查看是否存在一些错误消息。 将此(包括stacktrace,如果有的话)复制到您的问题。 这可以使我们为您提供帮助。

(如果您在Linux上使用带有IcedTea-Plugin的OpenJDK,请查看~/.icedteaplugin/java.stderr~/.icedteaplugin/java.stdout ,它们尚未实现Java控制台。)

还有一个问题。 您正在重载,实际上并没有覆盖paint (或paintComponent )。 添加@Override ,编译器将告诉您您的错误:

@Override public void paint(Graphics g, boolean closeDoors) { // wont compile

似乎您需要调试课程。 至少要放入一些System.err.println并检查Java控制台。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM