在try / finally外部或内部初始化一次性资源

我已经看到了两种获取和处理资源的方法。 或者: Resource resource = getResource(); try { /* do something with resource */ } finally { resource.close(); } 要么: Resource resource = null; try { resource = getResource(); /* do something with resource */ } finally { if (resource != null) resource.close(); } 我想知道哪种风格更可取。 第一个避免if条件,而第二个(我假设)在赋值之后但在进入try块之前处理线程中止的情况。 这些风格有什么其他优点和缺点? 我最好使用哪一个?

JavaFX:更新到Java 9后出现奇怪的ClassNotFoundException

我在Java 8中启动了一个Maven项目,并希望将其迁移到Java 9.同时我也从Eclipse Neon EE转到Eclipse Oxygen EE。 (重新安装JFX SDK)。 虽然Eclipse Workspace没有显示任何错误; 一旦我尝试编译并运行以前在Java 8中运行完全正常的完全相同的程序,我会得到以下exception: {…} Caused by: java.lang.ClassNotFoundException: com.sun.javafx.css.converters.PaintConverter at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) … 26 more 运行应用程序应用程序的exception。主要 我现在已经多次重建项目,无法让它工作……

如何使用API​​ 3.1.1在Maven插件中使用Aether(eclipse)?

我正在使用API​​ v3.1.1开发一个新的Maven插件,因为我需要升级到Maven 3.1.1,并且需要以Aether的方式处理工件存储库,以及检索工件版本的完整列表。 我正在使用Eclipse Aether(0.9.0.M4),而不是 Sonatype Aether。 我已经通过http://wiki.eclipse.org/Aether阅读并尝试了演示http://git.eclipse.org/c/aether/aether-demo.git/tree/ ,但我还没能理解为什么AbstractMojo的子类中的以下内容不起作用。 RepositorySystem repoSystem , RepositorySystemSession repoSession , List projectRepos和List pluginRepos都为null 。 我也尝试使用@Component来注入具有相同结果的那些。 有什么我错过了,以便将这些物体注入魔力? import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.repository.RemoteRepository; … public MyMojo extends AbstractMojo { /** * The entry point to Aether, ie the component doing all the work. * * @component */ private RepositorySystem repoSystem; /** […]

使用java中的nio包的socketChannel从客户端套接字获取的最大数据大小

使用SocketChannel sc =(SocketChannel)key.channel(); ,我们可以将数据从端口提取到缓冲区。 为了在不丢失数据的情况下从端口连续接收数据,代码应该如何? 这是我的代码 import java.io.*; import java.net.*; import java.nio.*; import java.nio.channels.*; import java.util.*; public class MultiPortEcho { private int ports[]; private ByteBuffer echoBuffer = ByteBuffer.allocate(32000); public MultiPortEcho( int ports[] ) throws IOException { this.ports = ports; go(); } private void go() throws IOException { // Create a new selector Selector selector = […]

SQLite和JDBC:返回UnsatisfiedLinkError

我在VirtualBox中运行Xubuntu。 我安装了sqlite3,由于某种原因不再捆绑。 我将sqlite-jdbc-3.8.7.jar添加到我的构建路径并运行这个简单的代码来测试它。 import java.sql.*; public class JDBC_test { public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName(“org.sqlite.JDBC”); Connection connection = DriverManager.getConnection(“jdbc:sqlite:test.db”); connection.close(); } } 我收到此错误: Exception in thread “main” java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open(Ljava/lang/String;I)V at org.sqlite.core.NativeDB._open(Native Method) at org.sqlite.core.DB.open(DB.java:161) at org.sqlite.core.CoreConnection.open(CoreConnection.java:145) at org.sqlite.core.CoreConnection.(CoreConnection.java:66) at org.sqlite.jdbc3.JDBC3Connection.(JDBC3Connection.java:21) at org.sqlite.jdbc4.JDBC4Connection.(JDBC4Connection.java:23) at org.sqlite.SQLiteConnection.(SQLiteConnection.java:45) at org.sqlite.JDBC.createConnection(JDBC.java:114) at org.sqlite.JDBC.connect(JDBC.java:88) at java.sql.DriverManager.getConnection(DriverManager.java:571) at […]

如何使用/ m“宏参数”从java /或命令行打开word文档而不指定winword.exe路径

我想做下一件事: String[] cmd = {“cmd”,”/c”,”c:\\Program Files (x86)\\Microsoft Office\\Office12\\WINWORD.exe”,”/mOpenPage”,”c:\\Navodilo.doc”}; Process proc = Runtime.getRuntime().exec(cmd); 但是,没有指定winword.exe路径但用宏打开文档… 我读到存在自动打开宏,是否可以为自动打开宏指定输入参数? 解决了: String[] cmd = {“cmd”,”/c”,”start”,”WINWORD.exe”,”/mOpenPage”,”c:\\Navodilo_za_uporabo_spletnega_servisa_wsEdp.doc”}; Process proc = Runtime.getRuntime().exec(cmd); 它运行默认的winword.exe并使用指定的宏打开word文档

正则表达式提取由空格分隔的键值对,其值为空格

假设一个单行字符串具有多个连续的键值对,由空格分隔,但允许的值也在值内(不在键中),例如 key1=one two three key2=four key3=five six key4=seven eight nine ten 从上面正确提取键值对将产生以下映射: “key1”, “one two” “key2”, “four” “key3”, “five six” “key4”, “seven eight nine ten” 其中“keyX”可以是任何字符序列,不包括空格。 尝试一些简单的事情,比如 ([^=]+=[^=]+)+ 或类似的变化是不够的。 是否有正则表达式来完全处理这样的提取,没有任何进一步的字符串处理?

Java ImageIcon / Icon和JLabel无法正常工作

为什么我的代码没有显示我插入的图像? 没有编译错误或语法错误,但为什么会这样? import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.SwingConstants; public class FirstUI extends JFrame{ private JLabel firstlabel; private JLabel secondLabel; private JLabel pie; public FirstUI(){ super(“Tittle”); setLayout(new FlowLayout()); firstlabel = new JLabel(“Hello World”); firstlabel.setToolTipText(“Hello World”); String path = “pie.png”; Icon pie = new ImageIcon(path); secondLabel = new JLabel(“Text with icon”,pie,SwingConstants.LEFT); […]

打破局部依赖关系以unit testingvoid方法

我正在使用mockito进行练习,但我对如何测试依赖于本地对象中方法调用的方法有点困惑。 请参阅以下示例: public class Worker { public void work() { Vodka vodka = new Vodka(); vodka.drink(); } } 这个工人不喜欢做自己的工作,而是喜欢喝酒。 但是我想补充一个测试来certificate他在工作时喝酒。 但是没有办法这样做,因为我必须validation调用方法工作时调用方法drink()。 我想你同意我的意见,这是不可能测试的,所以我需要在开始测试之前打破依赖。 这是我的第一个疑问,你认为打破这种依赖的最佳方法是什么? 如果我只是将伏特加对象的范围更改为全局,我认为不会很好(我不想将它暴露给类的其他部分)。 我想创建一个工厂,像这样: public class Worker { private VodkaFactory vodkaFactory = new VodkaFactory(); public void work() { Vodka vodka = vodkaFactory.getVodka(); vodka.drink(); } } 我不确定我是否确实打破了依赖关系,但我现在要做的是测试在执行work()时调用方法drink()。 我试了这个没有运气: @Test public void does_the_worker_drink_while_working () { VodkaFactory […]

枚举和单身 – 顶级vs嵌套枚举

现在众所周知,在java中创建单例的推荐方法是通过枚举(参见例如此处 ) 但是(例如在这个答案中 )似乎(在评论中回复我的@MikeAdler)考虑在单例类中使用枚举的正确方法(例如,请参阅此处的完整示例,或给出的代码)下面)。 我似乎并不真正理解这个的需要/使用 – 有人可以详细说明(并且最好为这个成语提供正确的方言)吗? public class Enclosing { private Enclosing() {} static enum Singleton { INSTANCE; private static final Enclosing singleton = new Enclosing(); public Enclosing getSingleton() { return singleton; } } } 编辑:一个人将通过Enclosing.Singleton.INSTANCE.getSingleton();获得单身人士Enclosing.Singleton.INSTANCE.getSingleton();