2013-08-22 1 views
-3

afk 한계를 깨기위한 목적으로 간단한 Java 프로그램을 작성하고 있습니다. Eclipse에서 실행할 때마다 제대로 작동합니다. 그러나 실행 가능한 jar 파일로 내보낼 때 키 누름을 시뮬레이션하지 않습니다. 나는 올바른 실행 구성과 모든 것을 왜 내가 혼란 스럽다고 믿는다. 어쨌든, 여기에 메인 클래스입니다 :Java 프로그램은 Eclipse에서 작동하지만 jar에서 작동합니다.

package minebot; 
import javax.swing.JOptionPane; 

public class MineBotRunner 
{ 

    public static void main(String[] args) 
    { 
     try 
     { 
      MineBot bot = new MineBot(); 

      bot.run(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 

      JOptionPane.showMessageDialog(null, "MineBot encountered an error and will now close.", "MineBot", -1); 

      System.exit(0); 
     } 
    } 

} 

그리고 여기에 다른 클래스 :

package minebot; 

import java.awt.AWTException; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Robot; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 

public class MineBot implements ActionListener 
{ 
    private JFrame frame; 

    private JButton button; 

    private String title = "MineBot"; 

    private boolean isMoving = false; 

    private long sysTime; 

    private long waitTime; 

    private long delay = 780000; //A 13 minute interval between actions to beat the 15 minute AFK limit. 

    private int holdDelay = 500; //A .5 second hold time for key presses. 

    private int wait = 200; //A .2 second wait time between forward and reverse actions. 

    private int forward = KeyEvent.VK_W; //The key held for the first action. 

    private int backward = KeyEvent.VK_S; //The key held for the second action. 

    private Robot robo; 

    public MineBot() 
    { 

    } 

    private void CreateGUI() 
    { 
     try 
     { 
      robo = new Robot(); 
     } 
     catch (AWTException e) 
     { 
      JOptionPane.showMessageDialog(null, "MineBot encountered an error and will now close.",title, 2); 
      System.exit(0); 
     } 

     frame = new JFrame(title); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.setPreferredSize(new Dimension(250,150)); 

     button = new JButton("Start"); 

     button.setBackground(Color.RED); 

     button.addActionListener(this); 

     button.setActionCommand("button"); 

     frame.add(button); 

     frame.pack(); 

     frame.setLocationRelativeTo(null); 

     frame.setVisible(true); 

     JOptionPane.showMessageDialog(frame, "<HTML><CENTER>Welcome to MineBot! If you have any ideas<br> for additional features or programs, please<br> email me at <a color=#fff>[email protected]</a>!</CENTER</HTML>",title, -1); 
    } 

    private void StartMoveLoop() throws InterruptedException 
    { 
     sysTime = System.currentTimeMillis(); 

     waitTime = sysTime + delay; 

     while(true) 
     { 
      if(isMoving) 
      { 
       sysTime = System.currentTimeMillis(); 

       if(sysTime>waitTime) 
       { 
        waitTime = sysTime + delay; 

        robo.keyPress(forward); 

        Thread.sleep(holdDelay); 

        robo.keyRelease(forward); 

        Thread.sleep(wait); 

        robo.keyPress(backward); 

        Thread.sleep(holdDelay); 

        robo.keyRelease(backward); 
       } 
      } 
     } 
    } 

    public void run() throws InterruptedException 
    { 
     CreateGUI(); 

     StartMoveLoop(); 
    } 

    public void actionPerformed(ActionEvent a) 
    { 
     if(a.getActionCommand().equals("button")) 
     { 
      if(isMoving) 
      { 
       button.setBackground(Color.RED); 

       button.setText("Start"); 

       isMoving = false; 
      } 
      else 
      { 
       button.setBackground(Color.GREEN); 

       button.setText("Stop"); 

       isMoving = true; 
      } 
     } 
    } 
} 

그들은 GUI 나타납니다 내가 그러나 더 키 입력 시뮬레이션되지 않습니다 버튼을 클릭 할 수 있습니다. 어떤 도움이라도 대단히 감사하겠습니다!

답변

-3

와우 죄송합니다. Eclipse는 그러한 종속성을 내보내지만 바보처럼 내 빌드 경로에 JRE를 추가하는 것을 잊어 버렸다. 그리고 PS @ Dileep, 별도로 할 필요가 없습니다.

+0

내가 선택한 대답은 dileep 중 하나 여야한다고 생각합니다. 솔직히 ... – Gianmarco

+0

@Zach M 빌드 경로는 프로젝트에 jar 파일을 추가하는 것을 의미합니다. Java 빌드 경로는 종속 프로젝트를 찾아 Java 프로젝트를 컴파일하는 동안 사용됩니다. 이것이 프로젝트에 Jars를 추가하는 방법입니다. – Dileep

+0

라이브러리를 별도로 추가 할 필요는 없습니다. 그것은 나의 끝에 elipse의 잘못된 구성이었다. 이제 자동으로 실행됩니다. –

3

Eclipse 많은 Jar 파일이 포함되어 있으며 프로젝트 실행을 위해 jar 파일을 사용합니다.

하지만 실행 가능한 Jar로 변환 할 때. 그 안에 모든 패키지를 휘게하지 마십시오. 프로젝트 라이브러리에 별도로 추가해야합니다. 그렇지 않으면 Jar를 실행할 때 문제가 발생합니다. !! Add Build Path를 사용하여 종속성을 추가하십시오. Java 빌드 경로는 종속 클래스를 찾기 위해 Java 프로젝트를 컴파일하는 동안 사용되며 은 JVM이 의존 클래스를 식별하는 방법입니다.

큰 프로젝트에서는 Class Dependency Analyzer을 사용하여 프로젝트의 종속성을 찾을 수 있습니다.