- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在带有 Java Midlet 的诺基亚手机上重复捕获音频片段。我目前的经验是,使用 Sun 文档中的代码(参见:http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/control/RecordControl.html)并将其包装在“while(true)”循环中是可行的,但应用程序会慢慢消耗手机上的所有内存,程序最终会抛出异常并且无法启动进一步的记录。
消耗的内存不是 Java 堆内存---我的示例程序(下面)显示 Java 内存大致保持在 185,000 字节左右的静态---但在由提供的底层支持库中存在某种内存泄漏诺基亚;我认为内存泄漏的发生是因为如果您在运行 Java 应用程序一段时间后尝试启动另一个(非 Java)应用程序(例如网络浏览器),手机会终止该应用程序并发出内存不足的警告。
我已经尝试了几种与文档中 Sun 的规范示例所采用的方法不同的方法(每次循环都初始化所有内容,尽可能只初始化一次,调用尽可能多的释放式函数,这些函数不应该绝对必要等)。似乎没有一个是成功的。下面是一个简单的示例程序,我认为它应该可以工作,但在 N80(尽管有固件更新)和 N95 上运行 15 分钟左右后就会崩溃。其他论坛也报告了此问题,但那里提供的解决方案似乎不起作用(例如,请参阅:http://discussion.forum.nokia.com/forum/showthread.php?t=129876)。
import javax.microedition.media.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Standalone extends MIDlet {
protected void startApp() {
final Form form = new Form("Test audio recording");
final StringItem status = new StringItem("Status","");
form.append(status);
final Command exit = new Command("Exit", Command.EXIT, 1);
form.addCommand(exit);
form.setCommandListener(new CommandListener() {
public void commandAction(Command cmd, Displayable disp) {
if (cmd == exit) {
destroyApp(false);
notifyDestroyed();
}
}
});
Thread t = new Thread(){
public void run() {
int counter = 0;
while(true) {
//Code cut 'n' paste from Sun JSR135 javadocs for RecordControl:
try {
Player p = Manager.createPlayer("capture://audio");
p.realize();
RecordControl rc = (RecordControl)p.getControl("RecordControl");
ByteArrayOutputStream output = new ByteArrayOutputStream();
rc.setRecordStream(output);
rc.startRecord();
p.start();
Thread.currentThread().sleep(5000);
rc.commit();
p.close();
} catch (Exception e) {
status.setText("completed "+counter+
" T="+Runtime.getRuntime().totalMemory()+
" F="+Runtime.getRuntime().freeMemory()+
": Error: "+e);
break;
}
counter++;
status.setText("completed "+counter+
" T="+Runtime.getRuntime().totalMemory()+
" F="+Runtime.getRuntime().freeMemory());
System.gc(); //One forum post suggests this, but doesn't help
this.yield();
}
}
};
t.start();
final Display display = Display.getDisplay(this);
display.setCurrent(form);
}
protected void pauseApp() {}
protected void destroyApp(boolean bool) {}
}
最佳答案
N 系列诺基亚设备存在已知的内存泄漏问题。它不是特定于 Java 的,而是在操作系统的某个地方。
最近在开发一款针对诺基亚 N90 的游戏时,我遇到了类似的问题。我会遇到内存问题,这些问题会在多次不同的应用程序重新启动后累积。解决方案只是降低游戏的整体质量和资源量......
我建议您尝试更新您的固件,因为较新的版本应该可以解决这个问题。然而,诺基亚并没有让升级固件变得非常容易,在大多数情况下你必须将设备发送给诺基亚。而且,如果这个应用程序不只是供您个人使用,您必须预料到任何使用 N 系列设备的人都没有最新的固件。
最后,我建议您花些时间浏览一下诺基亚论坛,因为我知道有一些与内存泄漏和 N 系列设备相关的帖子。这是一篇似乎可以解决您遇到的问题的帖子。
http://discussion.forum.nokia.com/forum/showthread.php?t=123486
关于java - 您可以在诺基亚手机 (N80/N95) 上使用 Java Midlet 录制音频而 JVM 不会泄漏内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/100832/
我制作了程序 Test.jar,其中有一个菜单可以运行另一个程序 (Hello.jar)。我一直在寻找并得到以下代码 callLauncher("javaapp:midlet-name=Hello;m
考虑到 J2ME Midlet 应用程序使用的所有 JSR,我能否以某种方式(从数据库或其他来源)获取支持 J2ME Midlet 应用程序的手机的百分比? 最佳答案 不,你不能。 J2ME 严重依赖
在我的 MIDlet wav 播放过程中,我每隔 1 秒就会听到这种可怕的 +/- 1 秒噪音。 Player p = Manager.createPlayer(getClass().getResou
我在 J2ME 工作。我希望我的应用程序必须在设备重新启动时自动启动。 我已按照 中的建议在 JAD 文件中添加了 Nokia-MIDlet-auto-start: yes 条目 http://lib
我正在为诺基亚 N82 编写 Java ME Midlet,我想从 30 开始倒数,到 0 时重新开始。每当我移动 .jar 和 .jad 文件并尝试从手机运行它们时,它都会说无法安装 midlet
我编写了一个 JavaME 程序,该程序访问 Web 服务以检索值,该 Web 服务在 tomcat 服务器上运行。 我面临一个非常奇怪的问题,每当我运行程序时,程序都会像我预期的那样下载新值,但它似
手机浏览器和 midlet 之间是否可以进行交互?据我了解,它们都在不同的沙箱中运行,除非无法在 midlet 和 native 应用程序之间使用特定于平台的 api 通信。 最佳答案 你是对的,没有
我正在尝试将一个界面合并到我的 Midlet 应用程序中来检测打印机。可能有几种情况:-A。已添加到移动设备的打印机。b.检测蓝牙打印机 提前致谢。 最佳答案 场景 a) 您可能想查看 blackbe
我正在客户端用 j2me 编写一个游戏,它连接到用 java 编写的服务器。该游戏将具有聊天功能,但作为次要功能。 对于连接到服务器的每个 midlet,都会生成一个服务器游戏线程。这些线程在它们之间
因此,我使用 Samsung SDK 1.1.2 开发了一个简单的 hello world midlet,并且打包了 midlet。现在我有两个文件(一个 JAR/JAD)组合。如何将这些安装到我的手
一个简单的问题,一个相当复杂的答案: 如何对 Java Midlet 进行签名,以便将其加载到安全提示较少的手机上? 最佳答案 获取所需的软件 Java SDK (JDK)来自Sun (你应该已经有了
以下代码运行正常,并弹出一个我可以输入内容的文本字段。手机模拟器的左上角软键可以让我更改输入类型(从 qwerty 到数字等),但是每次按下左上角的按钮时,我都会收到 NullPointerExcep
我正在尝试制作一个使用 midlet 作为菜单的程序。当从菜单访问某些命令时,它将访问 Canvas (就像在弹出按钮中选择 fillrectangle 和 fillarc 一样)。如果我选择fill
我开发了一个应用程序,它可以点击 protected 网址。当我使用“https”点击此网址时,我在模拟器中得到“证书已过期”,在真实设备中得到“证书验证失败”。下面是代码片段: String log
我开发了j2me应用程序。该应用程序广泛使用文件连接api访问文件,因此从symantec(Veri标志)购买了证书以避免文件权限问题并成功签署JAD文件。 问题:-在 Blackberry curv
我编写了以下 Java 应用程序: import java.util.Timer; import java.util.TimerTask; import javax.microedition.lcdu
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How do you sign a Java Midlet? 我如何签署 Java midlet?
我想在安装/删除我的黑莓应用程序 (cod) 时收到通知。类似于 Midlet-Install-Notify JAD 属性。目前,黑莓似乎不支持这个 JAD 属性。有黑莓的替代品吗?如果没有,我可以使
我想签署我的应用程序,但我不希望其用户在安装我的应用程序之前在他们的手机上安装证书。是否可以使用自签名证书对 j2me midlet 进行签名? 最佳答案 这是可能的,为此您需要从 verisign
我在 J2ME 工作。我希望我的 MIDlet 必须无限运行。即使我按下设备上的任何键,它也不能关闭。 请帮我看看我该怎么做? 最佳答案 如果您使用的是诺基亚手机,您可以在 Jad 文件中添加 Nok
我是一名优秀的程序员,十分优秀!