小编ama*_*ent的帖子

使用PDFBox从特定页面读取文本

我知道如何使用PDFBox来阅读整个pdf文件的文本PDFTextStripper.getText(PDDocument).

我还有一个关于如何使用特定页面获取对象引用的示例PDDocumentCatalog.getAllPages().get(i).

如何使用PDFBox获取一个页面的文本,因为我在PDPage课堂上没有看到任何这样的方法?

java pdfbox

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

防止JInternalFrame移出JDesktopPane

当我在JDesktopPane中有一个JInternalFrame时,JInternalFrame是可移动的(这很好).但是,可以将它移到JDesktopPane的可见范围之外(我不是很喜欢)

为了亲眼看看,这里有一些示例代码:

public static void main(String[] args) {

  JFrame frame = new JFrame("JDesktopPane");
  JDesktopPane tableDisplay = new JDesktopPane();

  JInternalFrame internalFrame = new JInternalFrame("JInternalFrame",true,true,true,true);
  internalFrame.setContentPane(new JLabel("Content"));
  internalFrame.pack();
  internalFrame.setVisible(true);
  tableDisplay.add(internalFrame, JDesktopPane.POPUP_LAYER);

  frame.setContentPane(tableDisplay);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setMinimumSize(new Dimension(400, 300));
  frame.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)

是否可以设置JInternalFrame或JDesktopPane,以便它们不允许这样做?

java swing jinternalframe jdesktoppane

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

git lfs migrate 似乎没有迁移文件

我们已经git-lfs成功使用了几年。但是,我们会定期添加包含在git-lfs. 我们转移到的最新文件类型之一git-lfs是我们的所有*.csv文件。

问题是我们*.csv的历史记录中有几个非常大的文件在初始迁移中没有被捕获,我也需要将这些文件移动到。git-lfs(我们正在从 BitBucket 迁移到 GitHub,GitHub 对允许的最大文件大小有更严格的规则,因此我需要确保所有旧的大文件也都打开git-lfs。)

最明显的方法是这样的:

git lfs migrate import --everything --include="*.csv"

当我运行该命令时,它似乎成功了。它重写历史,输出看起来像这样:

PS E:\source\swyfft_web_ken> git lfs migrate import --everything --include="*.csv"
migrate: Sorting commits: ..., done.
migrate: Rewriting commits: 100% (131623/131623), done.
  development                                   1b042eeebfb346af8f7e90d1f6c7b6abfc64d014 -> 1b042eeebfb346af8f7e90d1f6c7
b6abfc64d014
  feature/ks/20200205_ImsWebServicesV2          e2b5b267d5215ef48d5ef4e3f0924613c6076cd7 -> e2b5b267d5215ef48d5ef4e3f092
4613c6076cd7
  master                                        2029338210697c795a536faa9dd4c141c6edd6c2 -> 2029338210697c795a536faa9dd4
c141c6edd6c2
  1.0                                           752143ee1b87020e9b285886b3986703d6c74a38 -> 752143ee1b87020e9b285886b398
6703d6c74a38
  1.1                                           5fefda3de45651107218a953e789ea5121002756 -> 5fefda3de45651107218a953e789
ea5121002756
  1.2                                           30f87f08e672d10de0029985ad5acc1bf5a82457 -> 30f87f08e672d10de0029985ad5a
cc1bf5a82457 …
Run Code Online (Sandbox Code Playgroud)

git github git-lfs git-lfs-migrate

8
推荐指数
0
解决办法
2700
查看次数

Maven webstart插件没有找到依赖项

希望有人能帮助我解决这个奇怪的问题.我正在尝试运行webstart插件但它似乎无法找到正在生成的jar中的主类.pom就像它可以获得的那样简单,并且类Test存在,并且正在被编译并放置在jar中.有人可以指点我正确的方向吗?

<project>
  <modelVersion>4.0.0</modelVersion>
  <name>Desktop Components</name>
  <groupId>com.test</groupId>
  <artifactId>test</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo.webstart</groupId>
        <artifactId>webstart-maven-plugin</artifactId>
        <executions>
          <execution>
            <phase>process-resources</phase>
            <goals>
              <goal>jnlp-download-servlet</goal>
            </goals>
          </execution>
        </executions>

        <configuration>
          <jnlpFiles>
            <jnlpFile>
              <jarResources>
                <jarResource>
                  <groupId>com.test</groupId>
                  <artifactId>test</artifactId>
                  <version>1.0</version>
                  <mainClass>Test</mainClass>
                </jarResource>
              </jarResources>
            </jnlpFile>
          </jnlpFiles>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
Run Code Online (Sandbox Code Playgroud)

这是Maven的跟踪:

C:\TEMP\webstart-test>mvn webstart:jnlp –e
+ Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Desktop Components
[INFO]    task-segment: [webstart:jnlp] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Preparing webstart:jnlp
[INFO] ------------------------------------------------------------------------
[INFO] Building Desktop Components
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: …
Run Code Online (Sandbox Code Playgroud)

maven-2 java-web-start maven-webstart-plugin

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

如何监控和记录构建(编译/测试)时间?

我在一个大型的Java项目上工作.我们使用maven作为构建工具,并使用Intellij(14)作为我的IDE.

目前,如果我构建整个项目(约15个模块),大约需要3分钟.由于我们使用代码的方式(即使在开发中),我最终经常进行完整的构建.在"测量得到的东西得到管理"的基础上,我希望能够监控/记录:

  1. 一个小时/天的生成运行了多少次?
  2. 运行构建需要多少时间?
  3. 如果有可能的话,可以通过maven任务来解决这个问题 - 即清理/编译/测试/其他插件等.

一种方法可能是将maven输出转储到文件,然后有一个进程来读取这些/计算我想要的统计信息.我该怎么做呢?

为了清楚起见,我不是要求就如何减少构建周期运行时提出意见/建议.我们已经在这方面做了相当多的工作,并且正在继续努力 - 事实上,我真的在寻找一种方法来监控我们在这方面的有效进展.

java compilation build intellij-idea maven

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

Java Resource InputStream正在关闭?

我正在将Java代码库从Java 7(80)迁移到Java 8(162).(是的......我们处于技术前沿.)

在切换之后,我在一个高度并发的环境中从部署的jar加载XML资源文件时遇到了问题.正在使用try-with-resourcesSAX 访问和解析资源文件:

try {
  SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
  try (InputStream in = MyClass.class.getResourceAsStream("resource.xml")) {
    parser.parse(in, new DefaultHandler() {...});
  }
} catch (Exception ex) {
  throw new RuntimeException("Error loading resource.xml", ex);
} 
Run Code Online (Sandbox Code Playgroud)

如果我错了,请纠正我,但这似乎是通常建议阅读资源文件的方法.

这在IDE中运行良好,但是一旦它被部署在jar中,我经常(但不是普遍的,并且不总是使用相同的资源文件)得到一个IOException,具有以下堆栈跟踪:

Caused by: java.io.IOException: Stream closed 
    at java.util.zip.InflaterInputStream.ensureOpen(InflaterInputStream.java:67)
    at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:142)
    at java.io.FilterInputStream.read(FilterInputStream.java:133)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager$RewindableInputStream.read(XMLEntityManager.java:2919)
    at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:302)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1895)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanName(XMLEntityScanner.java:728)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1279)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2784)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:842)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:327)
    at …
Run Code Online (Sandbox Code Playgroud)

java jar resource-files ioexception java-8

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

Maven-webstart-plugin包含运行时依赖项

使用maven-webstart-plugin构建jnlp时,我发现运行时依赖项未包含在jnlp中.

我正在使用这样的模板:

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="$jnlpspec" codebase="${url}/${appName}" href="${outputFile}">
    <information>
        <title>${appName}</title>
        <vendor>$project.Organization.Name</vendor>
        <homepage href="${url}/${appName}"/>
        <offline-allowed/>
    </information>
    <security>
        <all-permissions/>
    </security>
    <resources>
        <j2se version="$j2seVersion"/>
        $dependencies
    </resources>
    <application-desc main-class="${main}" />
</jnlp>
Run Code Online (Sandbox Code Playgroud)

如何包含运行时依赖项?好吧,我可以单独包括它们:

<plugin>
    <groupId>org.codehaus.mojo.webstart</groupId>
    <artifactId>webstart-maven-plugin</artifactId>
    <configuration>
      <dependencies>
        <includes>
          <include>groupId:artifactId</include>
          ...
        </includes>
      </dependencies>
      ...
    </configuration>
  </plugin>
Run Code Online (Sandbox Code Playgroud)

...但理想情况下,每次我向项目添加运行时依赖项时,我都不想记得要更改它.

有没有办法指示插件包含所有运行时依赖项?

jnlp java-web-start maven maven-webstart-plugin

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

使用 Java ProcessBuilder 从 TaskScheduler 启动的进程运行可见应用程序

在最新版本的 Windows 中通过任务计划程序启动任务时,如果任务是“无论用户是否登录都运行”,则该任务将不会交互运行 - 即它不会启动 UI。

作为参考,这是根据Microsoft 的说法,并在此SuperUser 问题和此StackOverflow 问题中突出显示:

您可以指定任务应该运行,即使计划运行任务的帐户在触发任务时未登录也是如此。为此,请选择标有“无论用户是否登录都运行”的单选按钮。如果选择此单选按钮,任务将不会交互运行。要使任务以交互方式运行,请选择“仅在用户登录时运行”单选按钮。

然而,我的问题是由此衍生的。

  • TaskScheduler 启动的任务是一个 Java 客户端应用程序,可以指示它运行进程 - 这些进程通过客户端应用程序中的 ProcessBuilder 运行。因此,该客户端应用程序被隐藏/不启动 UI 是可以的 - 事实上,没有 UI。

  • 但是,如果如上所述通过 TaskScheduler 启动客户端应用程序以“无论用户是否登录都运行”,则客户端应用程序中由 ProcessBuilder 启动的任何进程也无法交互运行/无法显示 UI。这是一个问题,因为客户端启动的一些进程是 UI 应用程序。

我不确定为什么会出现这种情况,但实际上我正在尝试找出是否有解决方法 - 例如可以添加一些环境变量或属性来获得由(不可见)客户端启动的可见进程。

有什么想法吗?

java scheduled-tasks windows-task-scheduler

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

静态内部类是一个好主意还是糟糕的设计?

我发现我有几个地方设有公共静态内部类,扩展"帮助"类使我的代码更加类型安全,在我看来,可读.例如,假设我有一个"SearchCriteria"类.我搜索的不同内容有很多共性(搜索术语,然后是一组搜索术语类型,日期范围等).通过在静态内部类中扩展它,我将扩展和可搜索的紧密耦合在一起有特定差异的班级.这在理论上似乎是一个坏主意(Tight Coupling Bad!),但扩展特定于这个可搜索的类(One Class,One Purpose).

我的问题是,根据您的经验,使用静态内部类(或者您的语言等同于什么)使您的代码更具可读性/可维护性,或者最终在EOF中咬你?

此外,我不确定这是否是社区维基材料.

oop inheritance class nested-class inner-classes

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

Java - 锁定文件以进行独占访问

我的问题是这样的:我正在使用 aWatchService来获取有关特定文件夹中新文件的通知,现在如果在所述文件夹中移动/复制或创建文件,则会触发事件并返回新文件的名称。现在的问题是,如果我尝试访问该文件并且该文件尚未完全存在(例如复制仍在进行中),则会引发异常。我尝试做的是这样的事情:

RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
FileChannel fc = raf.getChannel();
FileLock lck = fc.lock();
Run Code Online (Sandbox Code Playgroud)

但即使获得了锁,如果我尝试写入文件,有时仍然会引发异常,因为另一个进程仍然有一个打开的句柄。

现在,如何锁定 Java 中的文件以实现真正的独占访问?

java locking file file-locking

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