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 나타납니다 내가 그러나 더 키 입력 시뮬레이션되지 않습니다 버튼을 클릭 할 수 있습니다. 어떤 도움이라도 대단히 감사하겠습니다!
내가 선택한 대답은 dileep 중 하나 여야한다고 생각합니다. 솔직히 ... – Gianmarco
@Zach M 빌드 경로는 프로젝트에 jar 파일을 추가하는 것을 의미합니다. Java 빌드 경로는 종속 프로젝트를 찾아 Java 프로젝트를 컴파일하는 동안 사용됩니다. 이것이 프로젝트에 Jars를 추가하는 방법입니다. – Dileep
라이브러리를 별도로 추가 할 필요는 없습니다. 그것은 나의 끝에 elipse의 잘못된 구성이었다. 이제 자동으로 실행됩니다. –