Мой Java-апплет не появляется - PullRequest
0 голосов
/ 20 февраля 2011

Не знаю почему, но ничего не появляется?

Полагаю, у меня есть апплет дома.

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);
                }
            }
}

Ответы [ 4 ]

3 голосов
/ 20 февраля 2011

Вы, вероятно, зацикливаетесь внутри метода 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);
 }
2 голосов
/ 20 февраля 2011

Я постараюсь помочь вам встать на правильный путь: -)

Возможно, вы уже знаете это, но если вы не используете IDE, я рекомендую использовать appletviewer для разработкиваши апплеты вместо браузера.Просто пища для размышлений: -)

Прежде всего, 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 в качестве member переменной.Другими словами, имейте:

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.Другими словами, если closeDoors равно true, оно будет установлено на false, и наоборот.

Обратите внимание, ваш код if(x>330 && x<280 && y>20 && y<20), вероятно, вообще не будет работать, так как y не может быть больше 20 и меньше 20 одновременно.Я позволю вам поиграть с этим, чтобы выяснить, что работает: -).

Надеюсь, это поможет.


Просто небольшая деталь, но вы, вероятно, должны назвать свой класс Color вместо color, чтобы следовать стандарту Java по именованию или назвать его как-нибудь иначе, если вы не хотите конфликтовать с java.awt.Color .

1 голос
/ 20 февраля 2011

Еще одна проблема.Вы перегружаете, фактически не переопределяя paint (или paintComponent).Добавьте @Override и компилятор сообщит вам о вашей ошибке:

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

Похоже, вам нужен курс по отладке.По крайней мере, введите System.err.println s и проверьте консоль Java.

1 голос
/ 20 февраля 2011

Как правило, в Swing вы никогда не должны переопределять метод paint(), а вместо этого paintComponent. (Однако я не уверен насчет JApplet - вместо этого я бы рисовал на JPanel внутри апплета, а не на самом апплете.)

И нет бесконечного цикла в вашем методе рисования - он должен возвращаться быстро, а не работать вечно, как уже сказал Toader.

Но это не ваша проблема, похоже, как вы написали в комментарии:

Я получаю, что апплет не инициализируется

Добавьте такую ​​(важную!) Информацию к вопросу (она имеет ссылку для редактирования по определенной причине).

Ваш браузер должен где-то иметь консоль Java, использовать ее и посмотреть, есть ли какое-либо сообщение об ошибке. Скопируйте это (включая трассировку стека, если есть) на ваш вопрос. Это может помочь нам помочь вам.

(Если вы используете OpenJDK с icedTea-Plugin в Linux, посмотрите вместо ~/.icedteaplugin/java.stderr и ~/.icedteaplugin/java.stdout, они еще не реализовали консоль Java.)

...