我被要求构建一个能够在运行时加载新代码(扩展)的java系统.在代码运行时如何重新加载jar文件?或者我如何装一个新的罐子?
显然,由于恒定的正常运行时间很重要,我想添加在其中重新加载现有类的能力(如果它不会使事情复杂化太多).
我应该注意什么?(把它想象成两个不同的问题 - 一个关于在运行时重新加载类,另一个关于添加新类).
问题摘要:
我想将类型参数(ArrayList<SomeClass>例如)的类传递给泛型方法作为类型参数.
假设我有一个方法:
public static <T> T getGenericObjectFromJson(String json, Class<T> genericType){
// details unimportant, basically returns an object of specified type
return JsonParser.fromJson(json, genericType);
}
Run Code Online (Sandbox Code Playgroud)
当然,这种方法对于任何类别都可以完美地运行.我可以像这样调用方法,例如:
getGenericObjectFromJson(jsonString, User.class)
Run Code Online (Sandbox Code Playgroud)
问题:我发现我不能这样做:
getGenericObjectFromJson(jsonString, ArrayList<User>.class)
Run Code Online (Sandbox Code Playgroud)
从语法上讲,这显然是无效的.但是,我不确定我是如何做到这样的.当然,我可以通过ArrayList.class,但是通用类型的添加使它不再具有语法上的有效性,我无法想到解决它的方法.
唯一直接的解决方案就是这样(看起来很傻):
getGenericObjectFromJson(jsonString, new ArrayList<User>().getClass())
Run Code Online (Sandbox Code Playgroud)
但是我们最终会丢失泛型类型,并且只返回一个未知类型的ArrayList(尽管它可以被强制转换).另外,不必要地实例化对象.
到目前为止,我唯一的解决方案是将该方法包装在一个包含可以实例化的泛型类型参数的类中,如下所示:
public class JsonDeserializer<T>...
Run Code Online (Sandbox Code Playgroud)
在这种情况下,该getGenericObjectFromJson方法将使用类的泛型类型.
问题:最后,我很好奇为什么我不能传递一个带有类型参数的类,以及是否有办法完成我试图做的事情.
一如既往,请告诉我这个问题是否有任何问题.
应用程序描述: 该应用程序旨在作为特定客户端的安全程序(不公开部署).当应用程序在一段时间内未检测到移动时,如果应用程序处于后台或设备处于睡眠状态,应用程序应发出警报并将其置于前台.
问题: 如果设备处于睡眠状态并处于锁定状态,我们需要唤醒并解锁设备.使用SO和其他地方的各种技术,我们已经能够(部分地)唤醒和解锁设备,但是当设备物理插入计算机时,这只能正常运行.如果设备本身没有插上电源,我们测试了唤醒 - 解锁,没有任何反应; 设备似乎仍然处于睡眠状态,应用程序似乎什么都不做(没有警报).
我使用过这篇文章关于使用PowerManager和KeyguardManager,这篇文章使用了窗口标志.
这是目前用于唤醒设备的代码:
public void wakeDevice() {
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG");
wakeLock.acquire();
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG");
keyguardLock.disableKeyguard();
runOnUiThread(new Runnable(){
public void run(){
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
}
});
}
Run Code Online (Sandbox Code Playgroud)
从我看到/使用过的其他一些SO问题的评论和帖子中,似乎PowerManager/KeyguardManager代码应该已经完成了这个技巧.同样,正如我之前所说的,它在技术上工作,而设备通过USB插入到开发机器,但在设备分离时绝对没有任何作用.
另请注意,这是我们的第一个Android应用程序,所以我们完全清楚我们可能会完全关注我们正在尝试做的事情.欢迎任何建议.
所以简而言之,鉴于上面的代码,为什么设备根据它是否插入而表现得如此不同,以及为了唤醒和解锁设备,我们应该改变什么?提前感谢您的帮助!
Rails的Paperclip插件有一个调整大小选项,可以保持图像的比例.根据Ryan Bates的Paperclip Railscast,要确保选项已打开,您必须在要调整大小的样式的末尾添加一个大于号的符号,如下所示:
:styles => { :small => "160x160>" }
Run Code Online (Sandbox Code Playgroud)
我正在寻找Paperclip将我的图像调整到一个确切的大小,即使这意味着它不成比例,所以我认为删除大于号就可以了,如下:
:styles => { :small => "160x160" }
Run Code Online (Sandbox Code Playgroud)
好吧,事实证明没有任何反应.因此,首先,大于号是多余的.不过,我仍然留下以下问题:
如何将图像强制设置为一定大小,忽略比例?
谢谢!
image-manipulation file-upload ruby-on-rails imagemagick paperclip
背景:我们在一个现有的Rails应用程序中构建了一个聊天功能.我们正在使用新ActionController::Live模块并运行Puma(在生产中使用Nginx),并通过Redis订阅消息.我们正在使用EventSource客户端异步建立连接.
问题摘要:当连接终止时,线程永远不会死亡.
例如,如果用户离开,关闭浏览器,甚至转到应用程序内的其他页面,则会生成一个新线程(如预期的那样),但旧的线程继续存在.
我现在看到的问题是,当出现任何这种情况时,服务器无法知道浏览器端的连接是否被终止,直到某些东西试图写入这个损坏的流,这在浏览器中永远不会发生已离开原始页面.
这个问题似乎记录在github上,类似的问题在这里问StackOverflow (非常完全相同的问题)和这里(关于获取活动线程的数量).
基于这些帖子,我能够提出的唯一解决方案是实现一种线程/连接扑克.尝试写入断开的连接会生成一个IOError我可以捕获并正确关闭连接,允许线程死亡.这是该解决方案的控制器代码:
def events
response.headers["Content-Type"] = "text/event-stream"
stream_error = false; # used by flusher thread to determine when to stop
redis = Redis.new
# Subscribe to our events
redis.subscribe("message.create", "message.user_list_update") do |on|
on.message do |event, data| # when message is received, write to stream
response.stream.write("messageType: '#{event}', data: #{data}\n\n")
end
# This is the monitor / connection poker thread
# Periodically …Run Code Online (Sandbox Code Playgroud) multithreading ruby-on-rails publish-subscribe redis ruby-on-rails-4
以下面的例子为例:
GroupMember.where(:member_id => 4).first_or_initialize
如果我想说这样的话怎么办?
如果存在member_id为4的GroupMember,则"找到它".否则,创建一个GroupMember,其member_id为4,group_id为7.
所以我希望上面的语句只检查member_id - 但如果它不存在,我希望它创建一个具有多个属性的GroupMember.我该怎么写呢?我正在使用rails 4.0.
rails guide示例,单击按钮保存帖子,控制台显示此消息:
在2013-12-25 22:42:04开始发布"/ posts"for 127001在2013-12-25 22:42:04 +0800由PostsController处理#create as HTML参数:{"utf8"=>"✓","authenticity_token"=>"CLalUww3gqnSlED0AWdou6P/U2qya vPqDiBANQOuYgA =","post"=> {"title"=>"11","text"=>"22"},"commit"=>"保存帖子"}(0.0ms)开始事务(0.0ms)回滚事务重定向到http:// 127001:3000/posts已完成302在16ms内找到(ActiveRecord:0.0ms)
开始GET"/ posts"for 127001 at 2013-12-25 22:42:04 +0800 Processing by PostsController #index as HTML Rendered posts/index.html.erb layouts/application(15.6ms)已完成500内部服务器错误31毫秒
ActionView :: Template :: Error(未定义的方法`每个'为nil:NilClass):
Run Code Online (Sandbox Code Playgroud)<th>Text</th> </tr> <% @posts.each do |post| %>================================================== ====
路线是正确的,为什么帖子是零?rails 4.0.2 ruby 2.0
是否有任何Rails 3(或ActiveRecord 3)的插件可以复制旧的deadlock_retry插件?或者,该插件是否仍适用于Rails 3?
美好的一天!
我需要帮助!
我开发了用于集成IIS(SharePoint)的Android应用程序.当我运行此代码(代码2)时,我得到错误
java.lang.NoSuchFieldError:org.apache.http.message.BasicLineFormatter.INSTANCE
我在方法onCreate(代码1)的firstActivity中运行此代码
版本httpclient - 4.3;
代码1
new Thread(new Runnable() {
@Override
public void run() {
new HttpsClietn();
}
}).run();
Run Code Online (Sandbox Code Playgroud)
代码2
package com.example.HttpsMy;
import android.os.Environment;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.NTCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.HttpClientBuilder;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.*;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class HttpsClietn {
HttpsClietn() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, IOException, CertificateException, UnrecoverableKeyException { …Run Code Online (Sandbox Code Playgroud) 问题摘要:我试图使用Oj gem将哈希序列化为JSON .似乎Oj不会自动将哈希的符号键转换为字符串.我想知道Oj是否有序列化期间"字符串化"的选项?
这是我的哈希的一个例子:
example_hash =
{:id=>1234,
:asset_number=>"1234-5678",
:latitude=>34.78495,
:longitude=>-92.12899,
:last_tracking_record_id=>123456789,
:bearing=>42,
:threat_level=>:severe}
Run Code Online (Sandbox Code Playgroud)
以上是这样的:
render json: Oj.dump(example_hash)
Run Code Online (Sandbox Code Playgroud)
遗憾的是,生成的JSON具有与上面完全相同的键,这意味着我需要在JavaScript中访问元素,如下所示:response[:asset_number].由于客户端代码是在几个月前实现的,并且现在只添加了Oj,我宁愿在序列化服务器端找到一种方法来对字符串进行字符串化.
Oj有一个名为的选项symbol_keys,它是一个布尔值,但是在这方面将其设置为true或者false似乎没有效果.
到目前为止我找到的唯一解决方案是with_indifferent_access按照这个答案的建议使用,但是在某些情况下我有哈希数组; 虽然我可以在技术上为该数组中的每个哈希调用该方法,但是考虑到Oj旨在加速Json序列化,我宁愿找到一种方法来使用Oj本身.最后,我想知道在Oj中是否有一个选项或设置将在序列化期间执行此操作.