摘要:即使获得wifi锁定,当手机使用电池运行时,WiFi会在一段时间后断开连接.
我已经使用启动线程的按钮将问题简化为单个活动.它只发送100.000个字符串到PC上运行的echo服务器(每100ms一个字符串).见下面的代码.我可以通过WireShark查看流量,并且echo服务器也会显示字符串.注意在开始发送之前(当然是在发布之后)获取WiFi和电源锁.
但是,当手机使用电池运行并且用户关闭手机时,它会持续发送字符串一段时间,然后WiFi断开连接,手机甚至不响应ping.断开连接需要600到6000秒(数字是那么圆,所以我认为它们很重要).
它在A/C连接时非常有效,所以我猜它与电源管理有某种关系.
为了测试它,我只需启动活动,启动echo服务器,启动WireShark,按"开始"按钮(android:onClick="doStart"
),阻止手机并将其放在桌面上.我去吃午餐或者其他什么,经过600-6000s我可以看到WireShark上的tx错误,echo服务器已经停止接收流量而手机没有响应ping.
手机是2.2,WiFi政策设置为"15米后睡觉".
package Odroid.test;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Date;
import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.PowerManager;
import android.view.View;
import android.widget.Button;
public class Test extends Activity {
PowerManager _powerManagement = null;
PowerManager.WakeLock _wakeLock = null;
WifiManager.WifiLock _wifiLock = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void doStart(View v) {
DoerThreadFake t = …
Run Code Online (Sandbox Code Playgroud) 我在stackoverflow上看到了几个类似的问题,但它们并没有解决我的问题.这个特别有用,因为它指向官方tomcat文档 ,特别是本节.
简而言之,提供的解决方案是:tomcat需要将jdbc数据库驱动程序复制到$CATALINA_HOME/lib
,因为它不会找到它们WEB-INF/lib/
.好吧,但它仍然不适合我,我变得疯了.
让我们看看您是否可以提供任何进一步的想法.
环境是Windows XP,Tomcat7,Eclipse Indigo,Java6和Spring3.
mysql-connector
已被复制到 $CATALINA_HOME/lib
C:\>dir "c:\Program Files\Apache-Tomcat-7.0.12\lib"\mysql*
[...]
/2012 13:39 877.094 mysql-connector-java-5.1.21.jar
[...]
C:\>
Run Code Online (Sandbox Code Playgroud)
您可能知道Eclipse的Tomcat集成为其部署(CATALINA_BASE
)创建了一个特定于WTP的目录,所以我也在那里复制了mysql-connector(我没有尝试过使用mysql-conector.jar
in CATALINA_HOME
,in CATALINA_BASE
和in两者):
C:\>dir c:\Share\genesis\wsEclipse-indigo\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\lib
[...]
29/08/2012 13:39 877.094 mysql-connector-java-5.1.21.jar
[...]
C:\>
Run Code Online (Sandbox Code Playgroud)
据我了解Tomcat的catalina.properties文件,它们都被添加到类路径中,所以我没想到会有什么不同,但我试过,以防万一.
我的spring数据源定义非常简单:
<bean id="securityDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/venus" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
Run Code Online (Sandbox Code Playgroud)
但是当我重新启动tomcat时,我收到以下错误:
ERROR: org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error …
Run Code Online (Sandbox Code Playgroud) 摘要:当通过OpenSC在PKCS11上使用JCA时,在提取证书时会请求PIN.
我有一个需要使用智能卡签名的应用程序.OpenSC支持智能卡,因此我使用Java内置的pkcs11包装提供程序来使用它.出于功能原因,我需要在没有请求PIN的情况下获取卡中的证书.如果用户最终签名,那么当然需要PIN.
我发现我可以在不提供PIN的情况下从命令行执行此操作:
pkcs11-tool --module C:\WINDOWS\system32\opensc-pkcs11.dll -r -a 50-MDS_Signature -y cert -o p.cer
Using slot 1 with a present token (0x1)
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
Oracle的文档明确指出"构建器将根据需要使用先前配置的回调处理程序提示输入密码"(http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html#登录).但是,KeyStore ks0 = ksbuilder0.getKeyStore();
即使只提取公共信息(例如证书),我的代码总是请求引脚作为我的电话.
遵循代码的摘录:
private static final String PKCS11_LIB = "C:\\WINDOWS\\system32\\opensc-pkcs11.dll";
private static final String NAME = "OpenSCpkcs11";
private static final String SLOT = "1";
private static final String PIN = "11111111";
private static final String ALIAS = "myCert";
[...]
private static CallbackHandler myCallbackHandler = new CallbackHandler() {
@Override
public void handle(Callback[] callbacks) …
Run Code Online (Sandbox Code Playgroud) 我已经使用 docker 多年了,现在我发现了一种非常奇怪的行为:该docker build
命令使用的 Dockerfile 不是我所拥有的。
请参阅下一个日志:
PS D:\reposNovabase\charmander\charmanderWarehouse> type Dockerfile
FROM adoptopenjdk/openjdk11-openj9:jdk-11.0.11_9_openj9-0.26.0-alpine
WORKDIR /app
COPY build/libs/charmanderWarehouse-1.0.0-SNAPSHOT.jar /app
EXPOSE 8083
CMD ["java", "-Xmx70m", "-jar", "charmanderWarehouse-1.0.0-SNAPSHOT.jar"]
PS D:\reposNovabase\charmander\charmanderWarehouse> docker build -f Dockerfile -t javiersedano/charmander-warehouse:test1 .
[+] Building 0.2s (7/7) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 32B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/adoptopenjdk/openjdk11-openj9:jdk-11.0.11_9_openj9-0.26.0-alpine 0.0s
=> [1/3] FROM docker.io/adoptopenjdk/openjdk11-openj9:jdk-11.0.11_9_openj9-0.26.0-alpine 0.0s
=> [internal] …
Run Code Online (Sandbox Code Playgroud) 我有一个在特定时间触发的BroadcastReceiver(通过AlarmManager).它是以编程方式安排的,具体取决于用户设置的首选项.
BroadcastReceiver做(简化和伪代码):
public void onReceive(Context context, Intent intent) {
handler = new Handler();
wifiManager.setWifiEnabled(true);
// Wait a few seconds to activate wifi and get IP
handler.postDelayed(new Runnable() {
void run() {
doTheJob();
}
}, 30000);
}
public void doTheJob() {
doSomethingAndTheOther(); // this starts service: context.startService(i);
wifiManager.setWifiEnabled(false);
}
Run Code Online (Sandbox Code Playgroud)
我已经在HTC Desire中使用了这段代码几年没有问题.此外,没有用户抱怨它不起作用.
但是,我最近买了一台Galaxy S3,并没有按预期工作.当我在未来几分钟设置闹钟(使用告知的偏好)时,它按预期工作:唤醒BroadcastReceiver,打开wifi,等待等待,完成作业并关闭wifi.
但是如果我在夜间设置闹钟(例如,3:00:00)则不会:闹钟被触发,wifi被打开......没有别的.这项工作既没有完成,也没有显然最终没有关闭wifi.我已创建日志并调用postDelayed(),但从未调用Runnable.run().
看来我的BroadcastReceiver进程在调用run()之前就已经死了.
知道为什么吗?有什么想法我怎么能避免它?