在Java中是否可以做一些#ifdef的事情,就像在C/C++中一样?
例:
class Test
{
public static final boolean ANDROID = false;
public Test()
{
if (ANDROID)
{
// do stuff that won't compile if not on android
}
else
{
// do stuff that should be only done on desktop
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,即使ANDROID是false,如在示例中,它仍将尝试编译内部的代码if,即使它不会(也不应该)编译.
我正在寻找一个方式做条件编译-编译器甚至不应该看的if,如果ANDROID是false.
我的问题的背景是我在Eclipse中有一个Processing应用程序.我在两个单独的项目中使用Android的正常处理和处理,但我希望能够在没有编译器错误的情况下将项目的源代码移动到彼此之间.例如,我希望能够拥有可以从Android项目移动到桌面项目的源代码文件,只需更改一些内容 - 例如,更改ANDROID = true为ANDROID = false.
我真的需要它是条件编译,因为当我将源代码从Android项目复制到桌面项目时,桌面库显然不会包含Android库,然后源代码甚至不会编译.
编辑:所以现在我知道Java中没有预处理器,我的问题是:是否有任何其他方法可以在我的项目中使用此功能(能够将源代码从一个复制到另一个而只需进行非常小的更改)必须手动[取消]注释特定的代码片段并记住它们的位置?
编辑2:这不是另一个问题的重复,因为我的问题包括可能在其中存在编译器错误的代码,而这个作为副本关闭的问题则没有.(另一个问题只涉及即使没有#ifdefs 也可以正常编译的代码.)为了解释,对于另一个问题,最高评价(和接受)的答案是关于编译的代码,但是根本不在字节码中发出 …
我目前正在参加计算机视觉课程,对于我的最终项目,我将制作一个与Kinect交互的小游戏.
现在我想用Java制作这个游戏,因为我之前从未真正想过制作游戏,而且我对语言很满意.但我似乎无法找到一种方法来访问深度数据(我只需要将其打包成一些Java数据结构)和RGB数据(相同的想法).
现在,我有办法与Kinect"交谈".我按照本教程操作,可以使用glview终端中的命令检测kinect .
我有一个名为Processing的东西,它承诺是一个允许我使用Kinect的Java库,但是它使用的是自己的语言,它是用Java构建的,所以它不是真正的Java,这意味着我不能使用所有的GUI和正常的Java功能.
我想要做的是以某种方式调用import random.Kinect.code;Java程序的顶部,让我使用最基本的Kinect功能,如getDepth()或getRGB(),并在Java中执行其他所有操作.
有谁知道我可以这样做的方式?(顺便说一句,我正在运行MAC OSX Lion)
涉及的软件:
* Latest Android SDK (as of today - 8/29/2012) with all of the latest APIs, Tools, Extras, etc downloaded.
* Processing 2.0a8 (latest build)
* Arduino ADK libraries for Processing ("ArduinoADK-beta-001" folder)
* My system: 64-bit Windows 7
Run Code Online (Sandbox Code Playgroud)
我跟着指示在 网页设置处理和Arduino的IDE和一切.我有一个Arduino Mega ADK板.我将其中一个ADK示例上传到电路板上没有任何问题.下一步是通过Processing将匹配示例上传到Android.我有一部Nexus One手机(Android版本2.3.6).
Android SDK Tools Revision 20.0.3
Installed at D:\Programs\Android SDK
Project Type: Application
Project Target: Android 2.3.3
API level: 10
Library dependencies:
No Libraries
------------------
API<=15: Adding annotations.jar to the classpath.
Merging AndroidManifest files into one. …Run Code Online (Sandbox Code Playgroud) 这个问题涉及版本1.2.1,它不会在不同的部分进行编译,因此它不是重复的.
我想在Processing中使用枚举.我已经读过他们在一个单独的文件中工作得更好所以我已经做到了.此代码正确编译:
enum Status
{
STOPPED,MOVING
};
Run Code Online (Sandbox Code Playgroud)
但是当我有这个代码
Status status;
Run Code Online (Sandbox Code Playgroud)
在另一个文件中,它给我以下错误:
Unrecognized type:46 (ENUM_DEF)
Run Code Online (Sandbox Code Playgroud)
我知道在早期版本的Processing中不支持枚举,但它们是否在2.0版中受支持?如果是这样导致错误的原因是什么?
在Processing中,我想导入一个用Java编写的库,它包装了一个外部库(.jar文件).
处理似乎导入我自己的库,但是当我调用构造函数(它引用外部库中的某些类)时,我java.lang.NoClassDefFoundError在Processing GUI控制台中获得了一个.
如果不是在我的Eclipse构建路径中包含External .jar,我使用库的实际源代码并导出所有这些,Processing不会抱怨.
我怎样才能打包这个项目,这样我就不必在Eclipse项目中包含所有库的源代码(而只是包含.jar文件)?
更新:根据NLtelaviv的建议,我选择导出为Runnable JAR.对我有用的是选择"将所需的库复制到生成的JAR旁边的子文件夹"选项.在这里,将在输出包含引用的.jar库的.jar的位置旁边创建另一个文件夹.
Update2:另一个有效的选项是"将所需的库提取到生成的JAR中".这样做允许JAR在内部访问引用.似乎同样适用于NLtelaviv的建议,但情况似乎并非如此.如果您不想要任何额外文件,请选择此选项.如果您浏览.JAR文件,您会注意到外部库位于单独的包文件夹中.
我正在使用Twitter4j库来检索推文,但是我的目的并不足够.目前,我从一个页面获得最多100个.如何在Processing中将maxId和sinceId实现为以下代码,以便从Twitter搜索API中检索超过100个结果?我对Processing(以及一般的编程)完全不熟悉,所以对此的任何方向都会很棒!谢谢!
void setup() {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setOAuthConsumerKey("xxxx");
cb.setOAuthConsumerSecret("xxxx");
cb.setOAuthAccessToken("xxxx");
cb.setOAuthAccessTokenSecret("xxxx");
Twitter twitter = new TwitterFactory(cb.build()).getInstance();
Query query = new Query("#peace");
query.setCount(100);
try {
QueryResult result = twitter.search(query);
ArrayList tweets = (ArrayList) result.getTweets();
for (int i = 0; i < tweets.size(); i++) {
Status t = (Status) tweets.get(i);
GeoLocation loc = t.getGeoLocation();
if (loc!=null) {
tweets.get(i++);
String user = t.getUser().getScreenName();
String msg = t.getText();
Double lat = t.getGeoLocation().getLatitude();
Double lon = t.getGeoLocation().getLongitude();
println("USER: " + user + " …Run Code Online (Sandbox Code Playgroud) 我不确定我是否可以正确表达这个问题,但在这里它会...
我想编写一个例子,其中小点具有根据它们移动的速度 - 而且,有一个随机运动叠加到"正确"运动.使用Processing下面的代码,我得到以下动画:

右边的点应该朝向右下角,我对它的行为表现不错.问题是左点,它应该是"静态的" - 所以它只会显示"随机"运动"到位"; 但是,正如动画.gif所示,它最终会偏离其原始位置一段距离.随机速度计算如下:
this.randspeed.set(random(0,1)-0.5, random(0,1)-0.5);
Run Code Online (Sandbox Code Playgroud)
我猜想这random(0,1)-0.5不会给我一个像高斯一样的"正态分布"(或者收敛到零); 但话又说回来,即使它是一个"正确的"高斯,我仍然可以有这样的"运气",所以说,正值[0:0.5]返回一整天,然后负值[-0.5:0]第二天返回,最后,它仍然是一个合适的高斯.
所以,我想,我正在寻找一种方法将(伪?) - 随机序列(如生成的那个)转换为伪随机序列random(0,1)-0.5,但其中N个样本的平均总和(例如10)我不知道如何称之为 - 一个随机序列周期性地收敛到零,我猜?
请注意,我一直在尝试position直接改变; 和保存position与改变finalpos,而不是-改变位置似乎更像是"自然的",平滑运动(特别是与模数帧的操作,所以一个新的随机速度没有分配每帧); 但是,它还允许随机噪声累积,并将点"推"远离其中心位置.另外,请注意我花了一些时间直到我可以在.gif上重现这一点,运行程序"live"似乎导致点更快地偏离原始位置(我已经阅读了一些关于硬件事件,如硬件磁盘写入用于/dev/random在Linux上更改熵,但我真的不知道它是否相关).
另外,我想到在点位置周围设置某种虚拟边框,并对从边界出来的随机运动进行碰撞检测 - 但在我看来,这对于太多的工作(以及矢量操作的CPU周期)来说似乎是这种事; 我希望随机函数能以某种方式以一种更容易的方式"缓和",而不是.
那么,是否有建议的方法在有限区域的中心位置周围进行这种随机运动?
marbles.pde:
import java.util.*; // added for Iterator;
ArrayList<Marble> marbles = new ArrayList<Marble>();
Iterator<Marble> imarb;
color mclr = #0000FF;
int RNDLIMIT = 2;
int framecount = 0;
void setup() {
size(600,400,P2D);
Marble m_moving = new Marble(width/2, height/2, 2, 2);
marbles.add(m_moving);
Marble …Run Code Online (Sandbox Code Playgroud) 我想在具有景深效果的3D画布(处理中)上显示数千个点.更具体地说,我想使用z缓冲区(深度缓冲)来调整point基于其与相机的距离的模糊水平.
到目前为止,我可以提出以下点着色器:
pointfrag.glsl
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
varying vec4 vertColor;
uniform float maxDepth;
void main() {
float depth = gl_FragCoord.z / gl_FragCoord.w;
gl_FragColor = vec4(vec3(vertColor - depth/maxDepth), 1) ;
}
Run Code Online (Sandbox Code Playgroud)
pointvert.glsl
uniform mat4 projection;
uniform mat4 modelview;
attribute vec4 position;
attribute vec4 color;
attribute vec2 offset;
varying vec4 vertColor;
varying vec4 vertTexCoord;
void main() {
vec4 pos = modelview * position;
vec4 clip = projection * pos;
gl_Position = clip + projection * …Run Code Online (Sandbox Code Playgroud) 背景 我想要压力传感器(他们正在工作)触发内置摄像头并在猫上床时拍照,上传图片并给我发电子邮件,以便我可以在网站上查看实时图像.
PHP服务器
我有一个php server running 127.0.0.1:8080这个结构的根:
NetworkedCat -->
data --> script-cat.php
index.html
NetworkedCat.pde
img.jpg
save2web.php
swiftmailer --> libs, etc
Run Code Online (Sandbox Code Playgroud)
在浏览器上进行测试,save2web.php并且cat-script.php正在运行,即脚本正在上传和通过电子邮件发送.
Arduino的
Arduino应用程序应执行以下操作:
压力传感器()也在读取和打印,并且已经校准了阈值.
但NetworkedCat.pde不是由串行事件触发的.
请注意:
Arduino Processinglocalhost在另一个开放port 80,因为php server工作8080.
如果我缩短处理代码,并测试图像捕获和上传,它就可以工作.所以,bug必须与串行事件有关.
为什么下面的处理代码不起作用?
/*Serial String reader
Context: Arduino
Reads in a string of characters until it gets a linefeed (ASCII 10).
then converts the string into a number
*/
import …Run Code Online (Sandbox Code Playgroud) EDITED
我是处理语言和GLSL着色器的初学者.我正在尝试为玻璃材料移植菲涅耳+立方体贴图着色器.但结果我的形状消失了,而不是...... :-(
我的顶点着色器是:
const float Air = 1.0;
const float Glass = 1.51714;
const float Eta = Air / Glass;
const float R0 = ((Air - Glass) * (Air - Glass)) / ((Air + Glass) * (Air + Glass));
uniform mat4 transform;
uniform mat4 modelview;
uniform mat3 normalMatrix;
attribute vec4 vertex;
attribute vec3 normal;
varying vec3 v_reflection;
varying vec3 v_refraction;
varying float v_fresnel;
void main(void){
vec4 t_vertex = modelview * vertex;
vec3 incident = normalize(vec3(t_vertex));
vec3 t_normal = normalMatrix …Run Code Online (Sandbox Code Playgroud)