如何从SessionID获取HttpSession对象?

我想根据某些事件使用户会话无效。 我存储了他们的sessionID,如何从这个ID获取他们的HttpSession? 不推荐使用HttpSessionContext类,无需替换。

了解Java中的易失性和非易失性读/写

我的java代码如下 public class MyClass { volatile int voltile ; //7 int nonVoltile ; //8 public static void main(String[] args) { for(int i=1; i<100000; i++){ f(); } } static void f(){ //16 MyClass t = new MyClass(); //17 t.voltile = t.nonVoltile; //18 t.nonVoltile = 0x11111; //20 t.voltile = 0x22222; //21 t.nonVoltile = t.nonVoltile + 1; //23 […]

MongoDB:不能使用游标迭代所有数据

更新更新: 解决了 ! 看到这个: MongoDB:无法用游标迭代所有数据(因为数据已损坏) 它是由损坏的数据集引起的。 不是MongoDB或驱动程序。 ================================================== ======================= 我正在使用MongoDB(2.4.6)的最新Java驱动程序(2.11.3)。 我有一个包含约250M记录的集合,我想使用游标迭代所有这些记录。 但是,在10分钟左右之后,我得到了一个假的cursor.hasNext(),或者说服务器上没有光标的exception。 之后我了解了游标超时并用try / catch包装了我的cursor.next()。 如果在迭代所有记录之前有任何exception或hasNext()返回false,程序将关闭游标并分配一个新游标,然后再跳回上下文。 但后来我读到了关于cursor.skip()性能问题……而程序刚刚达到~20M记录,而cursor.skip()之后的cursor.next()抛出了“java.util.NoSuchElementException”。 我相信这是因为跳过操作已经超时,这使光标无效。 是的,我已经阅读过关于skip()性能问题和游标超时问题……但是现在我认为我处于两难境地,修复一个会打破另一个。 那么,有没有办法优雅地遍历庞大数据集中的所有数据? @mnemosyn已经指出我必须依赖基于范围的查询。 但问题在于我想将所有数据分成16个部分并在不同的机器上处理它们,并且数据不是均匀分布在任何单调密钥空间内。 如果需要负载平衡,必须有一种方法来计算特定范围内的密钥数量并平衡它们。 我的目标是将它们分成16个部分,所以我必须找到四分位数的四分位数(对不起,我不知道是否有一个数学术语),并使用它们来分割数据。 有没有办法实现这个目标? 当通过获得分区边界键实现第一次搜索时,我确实有一些想法。 如果新光标再次超时,我可以简单地记录最新的tweetID并重新开始使用新范围。 但是,范围查询应该足够快,否则我仍然会超时。 我对此并不自信…… 更新: 问题解决了! 我没有意识到我不必以粗糙的方式对数据进行分区。 循环工作调度员会这样做。 请参阅接受的答案中的评论。

JProgressBar上的自定义画家

我试图通过使用自定义Painter对象来改变当前Swing L&F(我现在使用的是Nimbus)中进度条的颜色,但是在创建时这些进度条有时会坚持使用它们的原始颜色(这个变化似乎是随机发生)。 我可能错过了一些简单的东西,但我很难过,Painter对象(以及它在下面的调用)…… import javax.swing.Painter; import java.awt.*; public class ProgressPainter implements Painter { private Color light, dark; private GradientPaint gradPaint; public ProgressPainter(Color light, Color dark) { this.light = light; this.dark = dark; } @Override public void paint(Graphics2D g, Object c, int w, int h) { g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); gradPaint = new GradientPaint((w / 2.0f), 0, light, […]

序列化ArrayList

我正在尝试编写一款Android游戏,即使用户想要返回主菜单或活动被系统杀死,我也希望能够暂停游戏。 onSaveInstanceState似乎并没有给我一个很大的控制权,我什么时候可以读回包,再加上我能说的,这个包只能在很短的时间内使用。 所以我想序列化一些我拥有的ArrayLists,然后再读回来。 我没有得到任何编译错误,也没有程序崩溃。 但是,数据要么永远不会被写入,要么永远不会被读取。 我不确定是哪一个。 我在onDestroy中调用了serializeData方法,并从onCreate调用了deserializeData。 这是我编写和读取数据的代码: public void serializeData(String filename, ArrayListarrayList) { FileOutputStream fos; try { fos = openFileOutput(filename, Context.MODE_PRIVATE); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(arrayList); oos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } } @SuppressWarnings(“unchecked”) private void deserializeData(String filename, ArrayListarrayList){ try{ FileInputStream fis = openFileInput(filename); ObjectInputStream ois = new […]

Java Swing EDT和并发

我只是想知道是否仍然需要确保invokeLater()Runnable的同步性。 我遇到了死锁,需要在保持并发性的同时克服它。 这是一个好代码的例子吗?: private String text; private void updateText() { SwingUtilities.invokeLater(new Runnable() { public void run() { synchronized(FrameImpl.this) { someLabel.setText(text); } } }); } 对于相当糟糕的示例感到抱歉,但我们必须假设text正被不同的线程修改,无法注入,并且依赖于正确的值。 这是正确的解决方案,还是通过将同步代码发送到未知的上下文中而无意中造成死锁问题? 谢谢。

10,000以下的数字总和,是Java中的3,5或7的倍数

我知道如何让程序为3,5和7中的每一个加总多个的总和,但我不知道如何让程序只使用每个数字一次。 例如,我可以让程序查找所有数字并将它们加起来为3然后对5进行相同的操作,但是数字15将在最终数字中两次。 我不确定我是如何得到它只采取一次数字。 谢谢你的帮助。

BouncyCastle找不到它提供的算法?

我正在玩BouncyCastle 1.46令我惊讶的是,下面的片段中的捕获块经常被绊倒。 Security.addProvider(new BouncyCastleProvider()); final Set found = new HashSet(); final Set missing = new HashSet(); final DefaultSignatureAlgorithmIdentifierFinder finder = new DefaultSignatureAlgorithmIdentifierFinder(); for (Service service : new BouncyCastleProvider().getServices()) { if (“Signature”.equals(service.getType())) { final String algorithm = service.getAlgorithm(); try { finder.find(algorithm); found.add(algorithm); } catch (IllegalArgumentException ex) { missing.add(algorithm); } } } System.out.println(“Found: ” + found); System.out.println(“Missing: […]

从适配器回调

所以我有一个自定义列表视图。 这就像Instagram布局,每个列表项中有1个图像和一堆按钮。 所以这就是问题所在: 我想实现分享按钮。 为此,我尝试创建从适配器到活动的回调。 但它似乎没有用。 这是我到目前为止(我裁掉了不相关的部分): 主要活动 public class MainActivity extends ActionBarActivity implements ListAdapter.OnShareClickedListener{ ListView main_list; List url_list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); main_list = (ListView) findViewById(R.id.listView); ListAdapter nListAdapter = new ListAdapter(context, url_list); main_list.setAdapter(nListAdapter); } @Override public void ShareClicked(String url) { Log.e(“Test”,url); } } ListAdapter public class ListAdapter extends BaseAdapter implements […]

在Java中需要多长时间? 用Java测量延迟时间

我不想更改此代码,我只对JVM,OS或内核定制/配置感兴趣以获得最佳结果! 我有一个第二个循环(1000 x 1ms) public static void main(String[] args) throws InterruptedException { long start = System.nanoTime(); for (int i = 0; i < 1000; i++ ) { Thread.sleep(TimeUnit.MILLISECONDS.toMillis(1)); } long duration = System.nanoTime() – start; System.out.println("Loop duration " + duration / TimeUnit.MILLISECONDS.toNanos(1) + " ms."); } 在我的带有内核3.12的Fedora 20上,这个循环需要1055毫秒。 这是相当不错的结果,平均超过1100ms 。 是否可以使用自定义JVM标志或操作系统配置使此代码更快? Loop duration 1055 ms.