2013-08-22 38 views
-3

我正在寫一個簡單的java程序,意圖打破afk限制。每當我在Eclipse中運行它時,它都可以正常工作。但是,當我將它作爲可運行jar文件導出時,它不會模擬按鍵。我相信我有正確的運行配置和一切,這就是爲什麼我很困惑。 總之,這裏是主類:Java程序在eclipse中的工作,但從罐子裏

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時出現問題。使用添加構建路徑來添加依賴關係。在編譯Java項目以發現相關類和 時,使用了 Java構建路徑,這是JVM如何識別依賴類的。

在大型項目中,您可以使用Class Dependency Analyzer來查找項目中的依賴關係。

相關問題