【问题标题】:How would I display my UI我将如何显示我的用户界面
【发布时间】:2017-06-05 20:07:12
【问题描述】:

我正在尝试通过从我的 clicker 类调用方法到我的主类来显示我的 UI。 主类

package me.removed.clicker;

import me.removed.clicker.Clicker;

public class Main
{
      public static void main(String[] args)
      {
        Clicker.getClicker().openUI();
      }
    }

点击类

package me.removed.clicker;

import java.awt.EventQueue;
import java.awt.Robot;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.FloatControl.Type;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import me.removed.clicker.handler.KeyboardHandler;
import me.removed.clicker.handler.MouseHandler;
import me.removed.clicker.util.Time;
import org.jnativehook.GlobalScreen;

public class Clicker
{
  public static Clicker instance;
  private boolean LEFT_held;
  private boolean LEFT_skip;
  private Time LEFT_pressTime;
  private boolean toggled;
  private Random random;
  private ClickerFrame clickerFrame;
  private MouseHandler clickerHandler;
  private KeyboardHandler keyHandler;
  private Robot robot;
  private Thread thread;

  public boolean isToggled()
  {
    return this.toggled;
  }

  public void setToggled(boolean toggled)
  {
    this.toggled = toggled;
  }

  public Clicker()
  {
    this.LEFT_held = false;
    this.LEFT_skip = false;
    this.toggled = false;
    this.random = new Random();
    try
    {
      GlobalScreen.registerNativeHook();
      this.clickerHandler = new MouseHandler();
      this.keyHandler = new KeyboardHandler();
      GlobalScreen.addNativeMouseListener(this.clickerHandler);
      GlobalScreen.addNativeKeyListener(this.keyHandler);
      this.robot = new Robot();
      LogManager.getLogManager().reset();
      Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
      logger.setLevel(Level.OFF);
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
    this.thread = new Thread(new Runnable()
    {
      public void run()
      {
        try
        {
          for (;;)
          {
            Thread.sleep(1L);
            if ((Clicker.this.isToggled()) && 


              (Clicker.this.isLeftHeld()))
            {
              long CPSDelay = Clicker.this.generateCPSDelay();
              if (Clicker.this.getLeftPressTime() != null)
              {
                if (Clicker.this.getLeftPressTime().hasPassed())
                {
                  Clicker.this.setLeftPressTime(new Time(CPSDelay));
                  Clicker.this.setLeftSkip(true);
                  Clicker.this.robot.mousePress(16);
                  Clicker.this.robot.mouseRelease(16);

                  Thread runThread = new Thread(new Runnable()
                  {
                    public void run()
                    {
                      try
                      {
                        AudioInputStream audioInputStream = 
                          AudioSystem.getAudioInputStream(Clicker.class.getClassLoader().getResource("left_click.wav"));

                        Clip clip = AudioSystem.getClip();

                        clip.open(audioInputStream);

                        float volume = -9.0F - Clicker.this.random.nextFloat() * 11.0F;


                        FloatControl gainControl = 
                          (FloatControl)clip.getControl(FloatControl.Type.MASTER_GAIN);
                        gainControl.setValue(volume);

                        clip.start();
                      }
                      catch (Exception localException) {}
                    }
                  });
                  runThread.start();
                }
              }
              else
              {
                Clicker.this.setLeftPressTime(new Time(CPSDelay));
                Clicker.this.setLeftSkip(true);
              }
            }
          }
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
      }
    });
    this.thread.start();
  }

  public boolean isLeftHeld()
  {
    return this.LEFT_held;
  }

  public void setLeftHeld(boolean LEFT_held)
  {
    this.LEFT_held = LEFT_held;
  }

  public void destroy()
  {
    try
    {

    }
    catch (Throwable e)
    {
      e.printStackTrace();
    }
    System.exit(0);
  }

  public void openUI()
  {
    EventQueue.invokeLater(new Runnable()
    {
      public void run()
      {
        try
        {
          UIManager.LookAndFeelInfo[] installedLookAndFeels;
          int length = (installedLookAndFeels = UIManager.getInstalledLookAndFeels()).length;
          for (int i = 0; i < length; i++)
          {
            UIManager.LookAndFeelInfo info = installedLookAndFeels[i];
            if ("Windows".equals(info.getName()))
            {
              UIManager.setLookAndFeel(info.getClassName());
              break;
            }
          }
          Clicker.this.clickerFrame = new ClickerFrame();
          Clicker.this.clickerFrame.setVisible(true);
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
      }
    });
  }

  public boolean getLeftSkip()
  {
    return this.LEFT_skip;
  }

  public void setLeftSkip(boolean LEFT_skip)
  {
    this.LEFT_skip = LEFT_skip;
  }

  public Time getLeftPressTime()
  {
    return this.LEFT_pressTime;
  }

  public void setLeftPressTime(Time LEFT_pressTime)
  {
    this.LEFT_pressTime = LEFT_pressTime;
  }

  public ClickerFrame getClickerFrame()
  {
    return this.clickerFrame;
  }

  public long generateCPSDelay()
  {
    int minCPS = 12;
    int maxCPS = 15;
    double minDiff = 83.0D;
    double maxDiff = 66.0D;
    double randomDiff = this.random.nextDouble() * 17.0D;
    return (long) (66.0D + randomDiff);
  }

  public static void setupClicker()
  {
    (Clicker.instance = new Clicker()).openUI();
  }

  public static Clicker getClicker()
  {
    return instance;
  }
}

您可以在我的主类中看到我尝试调用 OpenUI,但是即使我这样做没有任何反应,进程运行但没有打开 UI,我尝试删除 Void 也无济于事,如其他帖子所示。

控制台错误:

Jun 06, 2017 3:43:54 AM org.jnativehook.DefaultLibraryLocator getLibraries
INFO: Library extracted successfully: C:\Users\WarDev\AppData\Local\Temp\JNativeHook-2.0.3.dll (0x7432773EB4D09DC286D43FCC77DDB0E1E3BCE2B4).

Jun 06, 2017 3:43:54 AM java.lang.ClassLoader$NativeLibrary load
INFO: hook_get_auto_repeat_rate [42]: SPI_GETKEYBOARDSPEED: 31.

Jun 06, 2017 3:43:54 AM java.lang.ClassLoader$NativeLibrary load
INFO: hook_get_auto_repeat_delay [56]: SPI_GETKEYBOARDDELAY: 1.

Jun 06, 2017 3:43:54 AM java.lang.ClassLoader$NativeLibrary load
INFO: hook_get_pointer_acceleration_multiplier [70]: SPI_GETMOUSE[2]: 1.

Jun 06, 2017 3:43:54 AM java.lang.ClassLoader$NativeLibrary load
INFO: hook_get_pointer_acceleration_threshold [84]: SPI_GETMOUSE[0]: 6.

Jun 06, 2017 3:43:54 AM java.lang.ClassLoader$NativeLibrary load
INFO: hook_get_pointer_acceleration_threshold [86]: SPI_GETMOUSE[1]: 10.

Jun 06, 2017 3:43:55 AM java.lang.ClassLoader$NativeLibrary load
INFO: hook_get_pointer_sensitivity [101]: SPI_GETMOUSESPEED: 10.

Jun 06, 2017 3:43:55 AM java.lang.ClassLoader$NativeLibrary load
INFO: hook_get_multi_click_time [115]: GetDoubleClickTime: 500.

java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source)
    at me.dewgs.clicker.ClickerFrame.<init>(ClickerFrame.java:442)
    at me.dewgs.clicker.Clicker$2.run(Clicker.java:175)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

【问题讨论】:

标签: java swing user-interface


【解决方案1】:
public static Clicker instance;

在我看来实例为空。

public static void setupClicker()
  {
    (Clicker.instance = new Clicker()).openUI();
  }

您曾在哪里调用setupClicker() 来初始化变量?

当你有 setupClicker() 方法来显示 UI 时,为什么还要调用 getClicker()

【讨论】:

  • 所以我在 main 中调用了 setupClicker() 但没有任何反应,和以前一样,任务运行但没有 UI
  • @Ciaran,您是否添加了任何调试代码以查看发生了什么。 openUI() 方法是否被执行? ClickerFrame 是否被创建。由于您使用的是 3rd 方类,因此您需要进行一些基本的调试。我看到你使用 Thread.sleep()。在Event Dispatch Thread 上执行的代码是否会阻止GUI 自行绘制。
  • 我在控制台中收到大量错误,现在更新为显示控制台错误
  • 这是我朋友最初给我的,当你运行它时它运行得非常好,但是当我反编译并尝试用 src 重新编译它时,没有任何效果。 www.mediafire.com/file/ha5d5zdy3er8a0e/math+lesson+12+bac.jar
  • This is what my friend originally gave me, - 好吧,和你的朋友谈谈。我对自定义类一无所知。同样,调试是编程的一部分。我建议您学习如何进行基本调试以隔离问题。错误消息会告诉您导致问题的行,因此请弄清楚为什么您有一个空变量。
猜你喜欢
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 2021-03-16
  • 2011-04-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 2019-01-10
相关资源
最近更新 更多