Во-первых, я знаю, что способ, которым я пытаюсь прочитать ввод, очень плохо, но я попытался использовать Keylistener, и он не работает независимо от того, что я пытаюсь. Я не знаю, что я делаю неправильно, так что я сейчас пытаюсь это сделать. Я пытаюсь вызвать поток в Controller.java из PreControls.java. Если бы вы могли помочь мне внедрить рабочий ключевой список, мне это очень понравилось бы, но я думаю, что исправление проблемы с этим потоком тоже будет работать. Я попытался отладить его, и поток, похоже, не запускается.Пытается начать свою тему
Код в PreControls.java:
Controller C = new Controller();
C.start();
System.out.print("Thread Should be started ");
Код в Controller.java:
package Game;
public class Controller extends Thread {
public void MyShipController(){
System.out.print("Thread Is started ");
String CharIn = "";
while(SpaceInvaders.GameOn = true){
CharIn = PreControls.ReadKeyPressed.getText();
if(CharIn.equalsIgnoreCase("a")){
SpaceInvaders.MyPos[0]--;
System.out.print("Move Left ");
}else if(CharIn.equalsIgnoreCase("d")){
SpaceInvaders.MyPos[0]++;
System.out.print("Move Right");
}else if(CharIn.equalsIgnoreCase(" ")){
//Fire Bullet
}
PreControls.ReadKeyPressed.setText("");
SpaceInvaders.MyShip.setLocation(SpaceInvaders.MyPos[0], SpaceInvaders.MyPos[1]);
jp1.repaint();
}
}
}
Извините за не предоставление SSCCEE. Мне нужно отправить весь проект, и это победит в том, что он делает проект.
ReadKeyPressed - это JTextArea, в который я вставляю буквы. jp1 является JFrame
Я работаю в среде Eclipse IDE.
EDIT: забыли добавить: после запуска апплета консоль читает только «Thread Should be started», поэтому это проблема с тем, как я создал поток, или как я пытаюсь его создать.
Редактировать 2: Цель «Мой конец» - обнаружить, когда нажата стрелка (или стрелка влево), и перемещать MyShip (JLabel) влево на 1 позицию, а вправо - на 1 позицию, если d (или стрелка вправо).
Хорошо, я принял решение Williams, поскольку это заставило мой поток работать. И, как было предложено, я собираюсь изучить привязки клавиш, чтобы обнаружить, когда нажаты клавиши. Спасибо за помощь.
Вы не преодолели метод 'run()'.Вы добавили несвязанный метод 'MyShipController()'. –
Нет, вы не совсем поняли концепцию [sscce] (http://sscce.org) или сейчас здесь для этого сайта [MCVE] (http://stackoverflow.com/help/mcve). Мы не хотим видеть весь ваш код или фрагменты кода. Вместо этого мы хотим, чтобы ** совершенно новая программа ** была небольшой, которая извлекает вашу проблему, которая выполняется, и это демонстрирует вашу проблему. Перечитайте ссылку. –
Попробуйте расширить Runnable, а не поток и реализовать метод single run(). – csmckelvey