2013-03-06 7 views
0

Во-первых, я хотел бы сказать, что мне жаль, если мой вопрос не звучит очень специфично, я не очень-то знаю о программировании, пожалуйста, простите меня.Проблемы с запуском команды запуска

Проблема с этим кодом заключается в том, что я хочу, чтобы он перемещал квадрат вокруг случайно (правильно знаю, что он просто говорит hi неоднократно), но run() не активируется.

Код:

import java.applet.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.geom.*; 
import javax.swing.*; 
import java.net.*; 

public class Square extends JApplet { 

    int X = 10; 
    int Y = 10; 

    public void init() { 
     FlowLayout flow = new FlowLayout(); 
     setLayout(flow); 
    } 


    public void paint(Graphics screen) { 
     // Paint lines 
     Graphics2D g2 = (Graphics2D) screen; 
     g2.draw(new Line2D.Double(X, Y, (X + 50), Y)); 
     g2.draw(new Line2D.Double(X, Y, X, (Y + 50))); 
     g2.draw(new Line2D.Double(X, (Y + 50), (X + 50), (Y + 50))); 
     g2.draw(new Line2D.Double((X + 50), (Y + 50), (X + 50), Y)); 
    } 

    public void run() { 
     System.out.println("Hi2"); 
     while (true) { 
      System.out.println("Hi"); 
      repaint(); 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       // do nothing 
      } 
     } 
     } 

    public static void main(String[] args) { 
     JFrame f = new JFrame("Square"); 
     f.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) {System.exit(0);} 
     }); 
     JApplet applet = new Square(); 
     f.getContentPane().add("Center", applet); 
     applet.init(); 
     f.pack(); 
     f.setSize(new Dimension(550,100)); 
     f.setVisible(true); 

    } 
} 

(я знаю, что я импортировал несколько вещей, которые я, вероятно, не нужно, я скопировал часть этого из другого кода)

+0

http://docs.oracle.com/javase/tutorial/deployment/applet/index.html – Aubin

+1

Что вы ожидаете от метода run()? Это никогда не будет называться. – Aubin

ответ

3

Хотя у вас есть метод run, ваш класс не реализует Runnable, поэтому он не может использоваться в Thread. Чтобы получить Thread работает, вы должны реализовать Runnable и создать новый Thread на init:

new Thread(this).start(); 

Если вы собираетесь взаимодействовать с компонентами пользовательского интерфейса, забыть о Threads. Swing имеет свой собственный concurrency mechanisms, который позволяет безопасно взаимодействовать с компонентами пользовательского интерфейса. Посмотрите на использование Swing Timer.

+0

Спасибо! Я посмотрю на это! – Jdman216

Смежные вопросы