Я сделал программу с несколькими классами, но, похоже, что-то странное происходит между двумя из них. Я не могу получить переменную от одной к другой. Однако я не могу получить переменную Public static int Screen.myWidth
и использовать ее на KeyHandler(). Я просто получаю ошибки, когда я пытаюсь что ..Невозможно получить переменную из другого класса
import java.awt.event.*;
import java.awt.*;
public class KeyHandler implements MouseMotionListener, MouseListener, KeyListener{
public static boolean backpack = false;
public static boolean movebackpack = false;
public static int spawntox;
public static int spawntoy;
public static int SpotWidth = (Screen.myWidth)/World.ScreenWidth;
public static int SpotHeight = (Screen.myHeight)/World.ScreenHeight;
public void mouseClicked(MouseEvent e) {
if (!backpack){
Player.targetx = (int) (e.getX()-Frame.x)/SpotWidth;
Player.targety = (int) (e.getY()-Frame.y)/SpotHeight;
Player.target = false;
Player.MovePlayer();
}
}
, а затем Screen.java
import java.awt.*;
import javax.swing.*;
import java.awt.image.*;
import java.io.*;
public class Screen extends JPanel implements Runnable{
public Thread thread = new Thread(this);
public static int myWidth, myHeight;
public static boolean isFirst = true;
public static Point mc = new Point (0, 0);
public static World world;
public static Ground ground;
public static Backpack backpack;
public Screen(Frame frame) {
frame.addMouseListener(new KeyHandler());
frame.addMouseMotionListener(new KeyHandler());
frame.addKeyListener(new KeyHandler());
thread.start();
}
public void define() {
world = new World();
ground = new Ground();
backpack = new Backpack();
}
public void paintComponent(Graphics g) {
myWidth = getWidth();
myHeight = getHeight();
define();
g.setColor(new Color(0, 0, 0));
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(new Color(255, 25, 100));
g.drawString(String.valueOf(Player.x), 600, 500);
ground.draw(g);
world.draw(g);
if(KeyHandler.backpack == true){
backpack.draw(g);
}
}
public void run() {
while(true) {
repaint();
try{
Thread.sleep(1);
} catch(Exception e) { }
}
}
}
Edit 1 Забыла сказать, что я получаю все ошибки, когда я щелкните где-нибудь, чтобы я мог запустить его и все, но он просто не может вычислить эту вещь, потому что не может получить Screen.myWidth
Edit 2 Ошибка:
Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException:/by zero
at KeyHandler.mouseClicked(KeyHandler.java:14)
at java.awt.Component.processMouseEvent(Component.java:6508)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Window.processEvent(Window.java:2022)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:702)
at java.awt.EventQueue$4.run(EventQueue.java:700)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Пожалуйста, сообщите об ошибке, которую вы получите. – iWumbo
Я думаю, компилятор жалуется на переменные, которые не инициализируются. Даже если он не жаловался, ваш код не будет делать то, что вы хотите: вы не инициализируете myWidth и myHeight до первого вызова paintComponent. До этого статические переменные в KeyHandler вычисляются, поэтому SpotWidth и SpotHeight просто не могут быть правильными. –
@GuntramBlohm Перемещение этого параметра в define() {или в run() {doesen't, похоже, помогает .. :(Но хорошая идея .. – minisurma