可能类似的问题:
synchronized关键字添加到我的每个方法中.那没用.然后我将volatile关键字添加到每个字段.问题似乎只是解决了问题.
经过一些实验,我发现负责的领域是一个GameState跟踪我的游戏当前状态的对象,可以是正在播放也可以是忙碌.忙时,游戏会忽略用户输入.我所拥有的是一个不断更改state变量的线程,而Event线程读取state变量.但是,在一个线程更改变量后,另一个线程需要几秒钟来识别更改,这最终会导致问题.
它是通过制作状态变量来修复的volatile.
为什么volatile默认情况下不是Java中的变量,以及不使用volatile关键字的原因是什么?
我正在用Java创建一个基于网格的游戏,我想实现游戏录制和播放.我不知道怎么做,虽然我已经考虑了两个想法:
每秒几次,我会记录整个游戏状态.为了回放它,我写了一个渲染器来读取状态并尝试创建一个可视化表示.但是,有了这个,我可能会有一个大的保存文件,任何播放尝试都可能会有明显的延迟.
我也可以将每个按键和鼠标点击写入保存文件.这会给我一个较小的文件,并可以减少滞后回放.然而,游戏开始时的最轻微错误(例如,1毫秒后拍摄)将导致游戏几分钟内完全不同的游戏状态.
那么,实现游戏播放的最佳方式是什么?
编辑 - 我不确定我的游戏究竟有多确定,所以我不确定整个游戏是否只能通过按键和鼠标点击来拼凑.
这适用于Applet,Servlet,Midlet等的子类.
为什么他们不需要main()?如果我想创建一个Craplet始于类init()或类似的东西,它是不好的设计,不然我怎么会去这样做呢?
在我的游戏中,我希望能够使用右移和左移键来实现不同的功能.在Java(或其他语言)中,有没有办法区分这两者?
KeyEvent类只有VK_SHIFT,它对应左右Shift键.同样的,Control,Alt,Enter,等.
我主要担心的是有人可能会用两根手指同时快速按下两个按键,从而获得不公平的优势.我应该关注这件事吗?
我想知道什么是一个很好的在线判断只是练习算法.我目前不是很擅长编写算法,所以可能一些简单(而且最不令人沮丧)会很好.
我已经尝试了UVA在线评判,但我花了大约20次试图让第一个例子问题正确; 绝对没有关于如何阅读输入等的文档.我读过有关Topcoder的内容,但我并不是真的想要竞争,只是为了练习.
假设我有一个类,带有一个带整数的构造函数.我有一个整数列表.如何使用map()此类的对象列表创建,每个对象都使用各自的整数构造?
Haskell中的show函数似乎没有做它应该做的事情:
Prelude> let str = "stack\n\noverflow"
Prelude> putStrLn str
stack
overflow
Prelude> show str
"\"Stack\\n\\n\\noverflow\""
Prelude>
Run Code Online (Sandbox Code Playgroud)
当我声明函数时,我通常将类型签名设置为Show,它不能正确处理换行符.我希望它\n作为换行符,而不是字面意思"\n".当我将类型更改为String时,函数可以正常工作.但是我必须为整数,浮点数等实现一个单独的函数.
例如,我可以声明一个函数:
foo :: (Show x) => x -> IO ()
foo x = do
putStrLn $ show x
Run Code Online (Sandbox Code Playgroud)
......并以这种方式称呼它:
foo "stack\n\noverflow"
foo 6
foo [1..]
Run Code Online (Sandbox Code Playgroud)
如何让函数返回预期的函数?即哪个函数类似show但可以返回包含换行符的字符串?
我正在尝试动态加载java .class文件并通过反射调用它.
我有一个名为Foo的课程; 它有一个空的构造函数,并有一个名为doit()的方法,它接受一个String参数并返回一个String.它也会反转字符串.
这是我的代码:
URL url = new URL("file://C:/jtest/");
URLClassLoader loader = new URLClassLoader(new URL[]{url});
Class<?> cl = loader.loadClass("Foo");
Constructor<?> cons = cl.getConstructor((Class[])null);
Object ins = cons.newInstance(new Object[]{});
Method meth = cl.getDeclaredMethod("doit", String.class);
Object ret = meth.invoke(ins, new Object[]{"!dlroW olleH"});
System.out.println((String)ret);
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,它打印出"Hello World!".但是,完成大约需要30秒.我知道反射很慢,但我希望它是10毫秒或者其他东西.
我正在使用Eclipse和JRE 1.6.0_13,我正在运行Windows Vista.
我在这做错了什么?
谢谢.
编辑:我已经分析了代码,并且它的所有时间都在第三行(loadClass())中使用.其他一切都会立即发生.
编辑:我把代码放在一个循环中; 慢速函数以某种方式得到优化,仅在第一个循环上需要30秒.
编辑:我找到了解决方案.
代替:
URL url = new URL("file://C:/jtest/");
我改成了:
URL url = new URL("file:/C:/jtest/");
现在它完美无缺.我不知道它为什么会起作用,但我不知道我(以及其他5个人)是如何错过的.现在我觉得愚蠢..
在Ideone站点中,用户上载要在远程服务器上运行的代码.这类似于在线法官的职能.
问题是用户可能会上传试图"破解"系统的代码.我知道在C和C++中很容易禁用某组系统调用(补丁几个.dll),但我对其他语言不太确定.
如果您在在线评判中支持更高级别的语言(Erlang,Haskell),您将如何保护您的系统?
是否有一个java编译器标志允许我goto用作有效的构造?如果没有,是否有支持的第三方java编译器goto?如果没有,是否有任何其他语言支持,goto同时可以轻松调用用Java编写的方法?
原因是我正在制作一种用Java实现的语言.Gotos是我语言的重要组成部分; 我希望能够将其编译为本机或JVM字节码,尽管它必须能够轻松使用Java库(即C支持goto,但要使用它,我必须在C中重写库).
我想生成C或Java等源文件,而不是字节码或机器码.我正在使用第三方编译器来做到这一点.