2012-09-29 2 views
-1

나는 타이머와 TimerTask를 작성을 시도하지만 그것이 작동하는 :(타이머 (소스가 발견되지 않음)

"당신의 포스트 코드 섹션을 설명하는 많은 컨텍스트가없는 얻을 수 없습니다 설명하시기 바랍니다 .? 시나리오 더 명확하게 "

오류

Timer.sched (TimerTask를, 오래, 오래) 라인 : 사용할 수 없습니다
소스를 찾을 수 없습니다

Exception in thread "main" java.lang.NullPointerException 
at java.util.Timer.sched(Unknown Source) 
at java.util.Timer.schedule(Unknown Source) 
at Game.<init>(Game.java:42) 
at Game.main(Game.java:25) 
.

Game.java

import java.applet.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import java.net.*; 
import javax.swing.*; 
import java.util.*; 
import java.util.Timer; 
import java.util.TimerTask; 
import java.lang.Runnable; 

public class Game implements ActionListener { 

private static Game hosmos2; 
private JFrame frmMain; 
private AntiCheat holyanticheat; 
private Dimension screen; 
//private Engine holyengine; 
private int sx, sy; 
private Timer timCheat; // My Timer 
private TimerTask tmtCheat; // My TimerTask 

public static void main(String[] args) throws FileNotFoundException, InterruptedException { 

    hosmos2 = new Game(); 
} 

private Game() throws FileNotFoundException, InterruptedException { 

    frmMain = new JFrame("Hosmos 2"); 
    frmMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frmMain.setSize(1366, 768); 
    screen = Toolkit.getDefaultToolkit().getScreenSize(); 
    sx = (int) ((screen.getWidth() - frmMain.getWidth())/2); 
    sy = (int) ((screen.getHeight() - frmMain.getHeight())/2); 
    frmMain.setLocation(sx, sy); 
    holyanticheat = new AntiCheat(); 
    //holyengine = new Engine(); 
    timCheat = new Timer(); // Creates my timer 
    //frmMain.add(holyengine); 
    frmMain.setVisible(true); 
    timCheat.schedule(tmtCheat, 500); // Schedule my TimerTask 
    Thread.sleep(1000); 
    timCheat.cancel(); 
} 

public void actionPerformed(ActionEvent e) { 


} 

public void tmtCheat() throws IOException { // Void for my TimerTask 

    holyanticheat.Detect(); // Runs Detect() in AntiCheat.java 
} 

} 

AntiCheat.java

import java.applet.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import java.net.*; 
import javax.swing.*; 
import java.util.*; 

public class AntiCheat { 

private BufferedReader highscore; 
private DataInputStream dis; 
private FileInputStream fis; 
private InputStreamReader isr; 
private String userscore, realscore; 

public static void main(String[] args) { 


} 

public AntiCheat() throws FileNotFoundException { 

    fis = new FileInputStream("data/highscore.hs2"); 
    dis = new DataInputStream(fis); 
    isr = new InputStreamReader(dis); 
    highscore = new BufferedReader(isr); 
} 

public void Detect() throws IOException { // Checks if you have cheated your score 

    userscore = highscore.readLine(); 
    if (!userscore.equals("If you touch this then you won't be able to play noob ;)")) { 

     for (int i = 0; i < 1000; i++) { 

      realscore = Integer.toString(i); 
      for (int j = 0; j < 173; j++) { 

       realscore = Integer.toString(realscore.hashCode()); 
      } 
      if (userscore == realscore) { 

       break; 
      } 
      if (i == 999) { 

       JOptionPane.showMessageDialog(null, "Du är lika fattig som Malcolm lol."); 
       System.exit(0); 
      } 
     } 
    } 
    highscore.close(); 
} 

} 
+0

모든 코드 세그먼트가 수행하는 작업을 설명하거나 적어도 코멘트를 추가 할 수 있습니까? – user1406062

+0

세그먼트 란 무엇입니까? 나는 관련된 라인에 몇 가지 코멘트를 추가했다. –

답변

0

당신은 당신의 TimerTask 변수 tmtCheat, 따라서 NullPointerException 초기화되지 않습니다.

tmtCheat이라는 메서드를 Timer에 실행하려면 익명 클래스를 사용하거나 을 만들 수 있습니다.

timCheat.schedule(new TimerTask() { 
    public void run() { 
    // your code 
    } 
}, 500); 
+0

나는 이것을 쓰지 않았다는 것을 의미합니까? "tmtCheat = 새 TimerTask();" Cus에서 "TimerTask()"에 대해이 오류가 발생합니다. "TimerTask 유형을 인스턴스화 할 수 없습니다." –

+0

@DanielHammer : 이는 'TimerTask'가 추상 클래스이기 때문입니다. 나의 예제에서와 같이 익명의 클래스를 사용하거나,'TimerTask'를 확장하는 클래스를 생성하십시오. –

+0

이전에 extends 예제를 사용했고 효과가있었습니다. 그러나 그때 그것은 무효로 달려 갔다. 그리고 나는 여러 가지 작업을 수행하기 위해 여러 타이머/시간 태그를 사용할 수 있기를 원합니다. 하지만 모든 타이머/timertask 실행() 무효에있는 모든 물건을 할 것이기 때문에 수 없습니다. ( –

관련 문제