小编Par*_*agJ的帖子

ExecutorService关闭

我对ExecutorService#shutdown方法的javadoc感到困惑.这些矛盾的陈述不是吗?

启动有序关闭,其中先前提交的任务将被执行,但不会接受任何新任务.此方法不会等待先前提交的任务完成执行.使用awaitTermination来做到这一点.

如果它可以有序地关闭以前提交的任务,那么它怎么能等待它们完成执行呢?

java concurrency java.util.concurrent

12
推荐指数
2
解决办法
4284
查看次数

同时迭代两个列表并使用流创建另一个列表

我想实现以下使用流:

List<MyObject> list1 = Arrays.asList(obj1, obj2, obj3);
List<Boolean> list2 = Arrays.asList(true, false, true);
List<MyObject> list = new ArrayList<>();
for(int i=0; i<list1.size();i++) {
     if(list2.get(i))
         list.add(list1.get(i));
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?它应该很简单,但我是java流的新手.

注意: list1和list2的长度始终相同.

java lambda java-stream

9
推荐指数
1
解决办法
1万
查看次数

如何检查cmd文件中的空值?

我有下面的命令行文件.我需要检查变量的空值.我没有提供任何命令行参数.

@echo off
@set PASSWORD=
@set PORT=9001
@set command=START
if %PASSWORD% NEQ () GOTO MyLabel

:MyLabel
@set command=%command% -p%PASSWORD%

@set command=%command% -i%PORT%
@echo %command%
Run Code Online (Sandbox Code Playgroud)

我尝试了几个选项,比如与空括号(()),空字符串("")进行比较,但似乎没有任何效果.运行时它给我以下输出:

()此时出人意料.

我使用的是Windows 7 x32.有人可以帮忙吗?

cmd batch-file

8
推荐指数
2
解决办法
2万
查看次数

从java.lang.Process退出值#waitFor()

方法waitFor()返回一个整数值,它是返回码.值0表示正常终止.但其他返回码的含义是什么?我得到一个退出值11.这是什么意思?所有出口价值代码都记录在哪里?

java

8
推荐指数
1
解决办法
2万
查看次数

如何使用camel创建数据源?

我刚开始学习Apache Camel.我理解了路由和组件的基础知识.现在我想通过连接到Oracle数据库,从一个特定的表读取记录并使用File组件将这些记录写入文件来尝试.要从数据库中读取,我假设我需要使用JDBC组件并给出dataSourceName.

但是,我找不到有关如何使用camel创建dataSource的任何信息.我发现与此主题相关的所有信息都使用Spring DSL示例.我不使用Spring,我只需要使用简单的独立Java应用程序来测试它.

我正在使用JDK7u25和Apache Camel 2.12.1.

有人可以发布样本从oracle表中读取并写入文件吗?

[编辑]

在网上查看了几个解决方案之后,我开始了解以下两种方法:

  1. 骆驼独立运行.这是我的代码:

    import javax.sql.DataSource;    
    import org.apache.camel.main.Main;
    import org.apache.camel.builder.RouteBuilder;
    import org.apache.commons.dbcp.BasicDataSource;
    
    public class JDBCExample {
    
        private Main main;
    
        public static void main(String[] args) throws Exception {
            JDBCExample example = new JDBCExample();
            example.boot();
        }
    
        public void boot() throws Exception {
            // create a Main instance
            main = new Main();
            // enable hangup support so you can press ctrl + c to terminate the JVM
            main.enableHangupSupport(); …
    Run Code Online (Sandbox Code Playgroud)

java apache-camel

7
推荐指数
2
解决办法
2万
查看次数

当Java中的线程从内存中删除时?

从Java API doc:

Java虚拟机继续执行线程,直到发生以下情况:

所有非守护程序线程的线程都已死亡,无论是通过从run方法调用返回还是抛出传播超出run方法的异常.

我希望我的假设是正确的,一旦线程完成其run()方法,它就有资格进行垃圾收集.在同样的背景下,我只是想知道:

  1. 如果它在返回后没有资格进行垃圾收集run(),那么应该设置它的引用null吗?
  2. 符合垃圾收集条件并不一定意味着该对象将从内存中删除.当垃圾收集时,它由底层操作系统/ JVM自行决定.但是如何确保(通过Java程序或外部工具)对象完全从内存中删除?
  3. 如果一个线程一旦完成run()方法就被认为是死的,为什么我仍然能够执行isAlive()getState()在同一个线程对象上?无论是调用返回falseRUNNABLE 分别.

java memory garbage-collection jvm memory-management

6
推荐指数
2
解决办法
8570
查看次数

HSQLDB服务器模式用户名/密码

如果我使用Java代码在服务器模式下启动HSQLDB,则服务器启动时没有任何问题.但是,当我尝试通过Java代码或通过HSQLDB DatabaseManagerSwing连接到同一个时; 我无法连接.

我在仅内存模式下使用user = conn1和password = conn1启动服务器.但是当连接到服务器时,它给了我以下异常:

java.sql.SQLInvalidAuthorizationSpecException: invalid authorization specification - not found: conn1
Run Code Online (Sandbox Code Playgroud)

我只能通过给user = SA和空密码来连接.我在Windows7机器上使用HSQLDB 2.2.5和JRE1.7.

有人能告诉我我哪里做错了吗?

java hsqldb

5
推荐指数
1
解决办法
2万
查看次数

iText 5.4.2是开源的吗?

我想知道iText 5.4.2是否是开源的.我知道这里描述得很好:

http://itextpdf.com/terms-of-use/index.php

但我很困惑,因为该页面也说明了这一点:

只要您开发在产品内部分发iText软件或在网络上部署iText软件的商业活动,就必须购买此类许可证,而不会根据AGPL许可证披露您自己的应用程序的源代码.这些活动包括:以ASP形式向客户提供付费服务,在云端或Web应用程序中即时提供PDF,并使用封闭源产品发送iText.

java itext

5
推荐指数
2
解决办法
9655
查看次数

使用 java -server 选项

Oracle文档说:

-服务器

选择 Java HotSpot 服务器虚拟机。在支持 64 位的 jdk 上,仅支持 Java HotSpot 服务器 VM,因此 -server 选项是隐式的。这在未来的版本中可能会发生变化。

有关默认 VM 选择,请参阅服务器级机器检测

因为它在 64 位 JDK 中是隐含的,所以我们不需要在运行 commandjava时添加这个参数,对吗?

此处的进一步文档说,服务器级机器至少有 2 个 CPU 和至少 2GB 的物理内存。这仍然适用于JDK7u25吗?

从文档中可以看出,如果 -server 选项与服务器级机器一起使用,它会提高性能,我想知道还有其他特定的优势吗?

java jvm

4
推荐指数
1
解决办法
2941
查看次数

ProcessBuilder 和带有空格的命令

我最近将 Java 版本更新为 JDK7u21。在更新21的发行说明中,明确提到了使用Runtime.exec的问题。

因此,我想更改我的代码以使用 ProcessBuilder。我正在尝试执行其中包含空格的命令。但即使为此使用 ProcessBuilder,我也会到达 C:\Users\Parag.Joshi\Documents,而不是确切的目录。

下面是我的代码:

ProcessBuilder p = new ProcessBuilder("cmd", "/c", "explorer ", "C:\Local Disk D\My Tutorial");
p.start();
Run Code Online (Sandbox Code Playgroud)

我查看了Java 执行路径名中带有空格的命令,但没有得到任何线索。

java processbuilder

3
推荐指数
1
解决办法
4081
查看次数

如何在 Swing 中设置工具提示的背景?

我正在开发一个 Swing 应用程序,我需要在其中显示 JTree 节点的工具提示。节点代表某些任务并按顺序在独立线程中运行。我需要根据任务的当前状态更改工具提示。

我在扩展 JTree 的类中覆盖了 getToolTipText(MouseEvent e) 方法。这也显示了一个工具提示,但我的应用程序中其他组件的工具提示的外观和感觉与 Jtree 节点显示的不同。

请参阅工具提示所需外观的附加图像。此工具提示是在 JTabbedPane 上设置的。 在此处输入图片说明

这是在 Jtree 上显示的工具提示的屏幕截图: 在此处输入图片说明

我试过 html 标签,但这不起作用。我还尝试使用以下代码设置 Jtree 节点工具提示的外观,但这也不起作用。我在下面使用的颜色代码与上面所需工具提示中显示的颜色代码相同:

UIManager.put("ToolTip.background", new ColorUIResource(255, 247, 200)); // The color is #fff7c8.
Border border = BorderFactory.createLineBorder(new Color(76,79,83)); // The color is #4c4f53.
UIManager.put("ToolTip.border", border);
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何设置我的 JTree 工具提示,如上图所示?

java swing jtree

3
推荐指数
1
解决办法
1501
查看次数

如何使用FutureTask处理超时?

我有这个令人沮丧的问题:我试图看看是否在下面的代码中抛出了TimeoutException,但这种情况不会发生.它总是打印当前时间5次并完成.

class MyTask1 implements Callable<Void> {  

    public Void call() throws Exception {  
        for (int i=0; i < 5; i++) {
            System.out.println(new java.util.Date());
            Thread.sleep(1000);
        }
        return null;
    }  
}

public class Timeout {
    public static void main(String[] args) throws Exception {
        FutureTask<Void> futureTask = new FutureTask<Void>(new MyTask1());
        futureTask.run();
        try {
            futureTask.get(1000, TimeUnit.MILLISECONDS); // Check if FutureTask completed in the given time
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            futureTask.cancel(true);
            e.printStackTrace();
        } …
Run Code Online (Sandbox Code Playgroud)

java

2
推荐指数
1
解决办法
2448
查看次数

如何使用Apache POI Event API读取特定行?

我想阅读大型xls或xlsx文件(大约超过30 MB并且有70,000多行).我能够使用Apache POI eaily读取小的excel文件,直到我收到OutOfMemory错误.

性能和内存使用对我来说是一个问题.我读了许多帖子,如果内存占用是个问题,那么对于XSSF,您可以获取基础XML数据,并使用XSSF和SAX(事件API)自行处理.好吧,我发现它很有趣,现在可以读取整个xlsx文件,没有任何问题.与不使用事件API时相比,几乎以GB为单位消耗了更少的内存(小于70 MB)(如果我将-Xmx设置为1024m并且它仍然用于挂起,则会高达1GB).

但是现在我想自定义读取过程并且只允许从excel读取特定行.我可以使用org.apache.poi.ss.usermodel.Sheet #getRow(int rownum)轻松完成此操作.但是使用Event API它会读取所有行而没有任何中断,我发现很难读取特定的行,例如行号2,3,5等.下面是我的整个代码:

import java.io.InputStream;
import java.util.Iterator;
import java.util.Vector;
import org.apache.poi.xssf.eventusermodel.XSSFReader;
import org.apache.poi.xssf.model.SharedStringsTable;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;

/**
 * XSSF and SAX (Event API)
 */
public class FromHowTo {
    public void processAllSheets(String filename) throws Exception {
        OPCPackage pkg = OPCPackage.open(filename);
        XSSFReader r = new XSSFReader( pkg );
        SharedStringsTable sst = r.getSharedStringsTable();

        XMLReader parser = fetchSheetParser(sst);

        Iterator<InputStream> sheets = r.getSheetsData(); …
Run Code Online (Sandbox Code Playgroud)

apache-poi

1
推荐指数
1
解决办法
9007
查看次数