- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
StackOverflow 用户您好。这与Java有关,而不是与机器人本身有关。我试图做的是将传感器与运动方法分开,以使代码易于阅读,但我遇到了一个问题。
传感器.java
package sensors;
import lejos.hardware.sensor.EV3ColorSensor;
import lejos.hardware.sensor.EV3GyroSensor;
import lejos.hardware.sensor.EV3TouchSensor;
import lejos.hardware.sensor.EV3UltrasonicSensor;
public class Sensors {
EV3TouchSensor touchSensor;
EV3ColorSensor colorSensor;
EV3GyroSensor gyroSensor;
EV3UltrasonicSensor ultrasonicSensor;
public Sensors(EV3TouchSensor t, EV3ColorSensor c, EV3GyroSensor g, EV3UltrasonicSensor u) {
touchSensor = t;
colorSensor = c;
gyroSensor = g;
ultrasonicSensor = u;
}
public int getColorSample(){
int sample = colorSensor.getColorID();
return sample;
}
}
运动.java
public class Movement {
RegulatedMotor left;
RegulatedMotor right;
EV3TouchSensor touchSensor;
EV3ColorSensor colorSensor;
EV3GyroSensor gyroSensor;
EV3UltrasonicSensor ultrasonicSensor;
public Movement(RegulatedMotor l, RegulatedMotor r, EV3TouchSensor t, EV3ColorSensor c, EV3GyroSensor g,
EV3UltrasonicSensor u) {
left = l;
right = r;
touchSensor = t;
colorSensor = c;
gyroSensor = g;
ultrasonicSensor = u;
}
//initialize sensors
Sensors sensors = new Sensors(touchSensor, colorSensor, gyroSensor, ultrasonicSensor);
public void moveForward() {
// get the color sample of the ground
//int sample = colorSensor.getColorID();
int sample = sensors.getColorSample();
// while machine is on the ground color
while (sample != 7) {
// get new sample
//sample = colorSensor.getColorID();
sample = sensors.getColorSample();
// move forward
syncForward();
}
// if on black, stop motors.
syncStop();
}
不要看其他方法,因为这些方法运行流畅,但错误出现在第 30 行,它试图从传感器类获取样本。我不知道,我也给出了注释掉的行,它们运行流畅。该错误来自访问传感器类,我无法想出解决方案。
我欠你的情!
最佳答案
啊,我花了一段时间才明白这一点。
问题出在这一行:传感器传感器=新传感器(touchSensor、colorSensor、gyroSensor、ultrasonicSensor);
您已经在构造函数之后编写了此初始化,但是,sensors
将在您初始化构造函数中的字段之前分配。这样,将创建仅包含空值的 Sensors
对象,并且在调用 sensors.getColorSample()
时,会出现 int Sample = colorSensor.getColorID( );
在 Sensors
类中将抛出 NullPointerException。
要修复它,请尝试更改 Movement
类,如下所示:
public class Movement {
RegulatedMotor left;
RegulatedMotor right;
EV3TouchSensor touchSensor;
EV3ColorSensor colorSensor;
EV3GyroSensor gyroSensor;
EV3UltrasonicSensor ultrasonicSensor;
// like in your code, sensors is still a field, but won't be initialized yet
Sensors sensors;
public Movement(RegulatedMotor l, RegulatedMotor r, EV3TouchSensor t, EV3ColorSensor c, EV3GyroSensor g,
EV3UltrasonicSensor u) {
left = l;
right = r;
touchSensor = t;
colorSensor = c;
gyroSensor = g;
ultrasonicSensor = u;
// here is the initialization of sensors - at this point, the arguments shouldn't be null anymore (unless they are passed as null to the constructor)
sensors = new Sensors(touchSensor, colorSensor, gyroSensor, ultrasonicSensor);
}
public void moveForward() {
// this method should be okay, you don't need to change it
// ...
}
对 future 的一些提示:
私有(private)
- 请参阅 Declaring Member Variables在 Java 教程中传感器
中的字段全部为空,然后您可以再次调试并查看为什么会出现这种情况。要进一步阅读有关 NullPointerExceptions 的内容,我建议 What is a Null Pointer Exception, and how do I fix it? .关于Java Lejos 抛出 nullpointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33920323/
我刚刚为我的 NXT 1.0 安装了 leJOS,它运行得很好。我正在使用 Eclipse 编写代码并将其上传到 block 。我遇到的唯一问题是该 block 完全忽略我的代码: import le
我们正在尝试构建一个机器人,为了让机器人了解他现在的位置,我们将使用矩阵。 所以我要调出矩阵。没有任何来自 main.java 的东西。然后尝试使用 initMatrix,它只是给我一个错误。 pub
我正在尝试制作附有超声波传感器的NXT机器人。它必须一直行驶到距离为15,然后引擎才停止。停止后,它必须转动,但不起作用。 import lejos.nxt.*; public class test
我是 java 和 lejos 的新手,所以如果我问了相当愚蠢的问题,请不要责怪我。 我试图通过在电机上旋转乐高超声波传感器来扫描我的 nxt 周围的 360 度区域。每 5 度,它就会将距离保存到
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 7 年前。 StackOverflow 用户
目前正在尝试使用 Lejos 为乐高 NXT 积木获取一些代码进行编译。我运行的命令是 nxjc Nxt_code.java 并且出现“找不到符号”错误。 TachoPilot 已导入。这是控制台的输
所以,基本上我想做的是: 我让我的 NXT 跑酷,当他这样做时,他必须在 LCD 上显示一张纸的颜色(他在纸上行驶)。 颜色是红色、绿色和蓝色。 唯一不起作用的是:读取或“看到”颜色并将它们显示在屏幕
我是编程初学者,正在尝试制作清洁机器人 NXT我附有(超声波传感器)和(声音传感器)机器人的工作是,当我拍手时,它必须开始向前移动,而当超声波传感器看到路上有东西时,它必须转身并继续前进。问题是,当它
我一直在尝试使用 LeJOS 库生成与我的 NXT 机器人的接口(interface)。当我运行代码时,我将以下错误打印到控制台: lejos.pc.comm.NXTCommException: Ca
我刚刚开始学习LeJOS编程,有一个小问题。我知道我可以以秒和度为单位测量移动距离。例如,是否可以以厘米为单位测量距离。如果是,那么如何? (请举例,如果可能的话或链接) 谢谢! 最佳答案 我假设您的
我正在编写一个java代码来控制一个相当简单的机器人,它应该执行以下操作; PID巡线、超声波检测、颜色检测。 由于这是我用 java 编写的第一个程序,显然我在 OOP 方面还有很多东西需要学习。
我有一个问题: 通过 leJos,我想控制连接到端口 2 的 ev3 颜色传感器。 但实际上,当我查看 EV3ColorSensor 类时,我找不到任何可以测量颜色传感器连接端口 2 的反射光强度的方
我尝试在 eclipse 中设置 leJOS,并从 git 导入所有库,但使用 ant 构建进行编译时遇到问题。这是我的构建文件:
我用 lejos 0.9 创建了一个项目。现在我所知道的是,当类具有 public static void main(String[] args) 时,我只能使用 eclips 插件上传和编译类(从
我正在为我的机器人俱乐部设置 Java 和 lejos,并且正在创建一些基本的驱动方法,但是当我将其组织到方法中时,它告诉我出现了空指针异常。问题是我不知道它在哪里或如何修复它。 import le
我的 Mac 上安装了 Lion OSX,我想使用我的 Mac 在 Lejos 上进行开发。 我搜索了很多像样的安装指南,但找不到。所以,我尝试了网上的其他教程,但不起作用。我首先安装了 CD 上的所
所以我刚从 Windows 10 切换到 Linux Mint rosa。我想弄清楚如何通过 Eclipse 下载固件。每当我点击插件然后我得到固件; “启动nxjflashg失败org.lejos.
我是一名优秀的程序员,十分优秀!