首次使用Java处理图像,并得到一些未记录得很好的奇怪异常.这是失败的代码行:
BufferedImage imgSelected = ImageIO.read(new File("/abs/url/to/file/image.jpg"));
Run Code Online (Sandbox Code Playgroud)
这一行抛出了一个IIOException,其中不支持的图像类型作为异常消息.我检查并重新检查它实际上是这行引发异常,File对象是有效的,URL是有效的,并且image.jpg
实际上是一个有效的JPG,在其他图像查看器中加载完全正常.
我该怎么做才能获得有关此异常性质的更多信息?这是在Java 7中加载图像的传统方式,还是旧的/弃用方法?关于这些"不支持的图像类型"异常的信息并不是很多,当然,ImageIO支持JPG!
谢谢你的帮助!
我正在接管另一个团队的项目,并且遇到了一些奇怪的Eclipse问题.
我正在使用Subversive作为我的插件,当我去检查后备箱时,它将我带到一个标准的"Check Out As"对话框,它允许我选择结账方法,并且是唯一适合我的方法(或是适用的)是最后一个选项(Check out as a project with the name specified
).
所以我指定了名称,然后项目检查正常,一切都很好,除了...
虽然这应该是一个Java项目(升级到Java Web应用程序),但是制作该项目的团队似乎将其创建为一般项目(通过转到Project > Properties > Resource > Type = 'Project'
).
因此,Java项目中没有启用任何典型功能,包括(但不限于):
所以我的问题是:
Check out as a project configured using the New Project Wizard
(为什么检查为新项目?!?),(2)Find projects in the children of the selected resource
(no),( 3)Check out as a folder into an existing project
(不).我的项目目录结构(在Eclipse中):
MyProject/
src/ --> "source directory" on Eclipse's classpath/buildpath
com.me.myapp
Driver
myconfig.txt
Run Code Online (Sandbox Code Playgroud)
在Driver
,我有以下代码:
public class Driver {
public static void main(String[] args) {
InputStream is = ClassLoader.getSystemClassLoader.getResourceAsStream("myconfig.txt");
if(is == null)
System.out.println("input stream is null");
else
System.out.println("input stream is NOT null :-)");
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到以下控制台输出:
input stream is null
Run Code Online (Sandbox Code Playgroud)
为什么?我是否放置myconfig.txt
在错误的位置?我是否错误地使用了ClassLoader API?别的什么?提前致谢!
在Linux中,您可以提供以下命令:
service <someService> start
service <someService> stop
Run Code Online (Sandbox Code Playgroud)
而不是杀死过程kill -9 <someService>
.正如我在之前的一个问题中所了解到的,这是发送进程a SIGTERM
(前者)和SIGKILL
后者(后者)之间的区别.
那么如何将普通JAR或WAR作为可以使用这些命令启动和停止的服务/守护进程"注册"(和编码)?我认为Java必须有一些API来处理SIGTERM
s?
提前致谢!
我最近偶然发现了以下Dart代码:
void doSomething(String url, String method) {
HttpRequest request = new HttpRequest();
request.open(method, url);
request.onLoad.listen((event) {
if(request.status < 400) {
try {
String json = request.responseText;
} catch(e) {
print("Error!");
}
} else {
print("Error! (400+)");
}
});
request.setRequestHeader("Accept", ApplicationJSON);
}
Run Code Online (Sandbox Code Playgroud)
我想知道e
catch子句中的变量是什么:
catch(e) {
...
}
Run Code Online (Sandbox Code Playgroud)
显然它是某种异常,但(1)为什么我们不需要指定它的类型,以及(2)我可以在那里添加什么来指定它的具体类型?例如,我怎么能以类似的方式处理多种类型的可能异常catchError(someHandler, test: (e) => e is SomeException)
?
典型的DropWizard应用程序指定一个Application子类,并覆盖其initialize
方法,如下所示:
class MyApplication extends Application<MyConfiguration> {
static void main(String[] args) {
new MyApplication().run(args)
}
@Override
public void initialize(Bootstrap<MyConfiguration> bootstrap) {
// ???
}
@Override
public void run(MyConfiguration configuration, Environment environment)
throws Exception {
// Register resources, health checks, etc.
}
}
Run Code Online (Sandbox Code Playgroud)
仔细阅读DropWizard文档以及JavaDocs:
Configuration
- YAML配置文件的对象表示.使用您自己的配置属性扩展它,它们也将从YAML文件中解析.Bootstrap
- 预启动应用程序环境,包含引导Dropwizard命令所需的所有内容.Environment
- Dropwizard应用程序的环境.但这些是相当模糊的类定义,特别是最后两个.我理解我应该是子类Configuration
,并且它代表我的应用程序的YAML/JSON配置文件的内存中POJO.
但我无法理解其他构造代表什么(Bootstrap
和Environment
).我习惯于在我的应用程序中注入特定于环境的配置,因此我倾向于将"环境"和"配置"的概念视为同一个概念.
此外,似乎DropWizard将Bootstrap
实例与Configuration
impl实例紧密结合,但我找不到关于这两个类如何不同以及如何使用它们彼此不同的可证明的例子.
所以我问:
Bootstrap
,我用它做什么用的?Environment
,我用它做什么?我的理解是,Google不喜欢Oracle在Java ME中使用JRE的许可政策,所以它只是使用自己的JVM规范重写它,模仿 JRE但行为有点不同,特别是在提高效率和更安全.
因此,如果我的理解是正确的,那意味着当javac
在某些Java源代码上运行并编译成"二进制"byetcode时,兼容的JVM将解释与Dalvik不同的字节码(在某些情况下).这是Dalvik与其他(兼容)JVM之间的固有差异.
如果我到目前为止所说的任何内容都不正确,请先纠正我!
现在,如果Android带有自己的编译器(它可能),并以不同的(Dalvik兼容)方式编译Java源代码javac
,那么我可以理解一些代码(不是用Android SDK编译)不会运行Android设备:
MySource.java --> javac --> MySource.class (JRE-compliant) --> JVM --> running Java app
MySource.java --> android-compiler --> MySource.class (Dalvik-compliant) --> Dalvik JVM --> running Android app
Run Code Online (Sandbox Code Playgroud)
但是,它看起来像你javac
用来编译Android应用程序!?!?所以看起来我们有这个:
MySource.java --> javac --> MySource.class (JRE-compliant) --> JVM --> running Java app
MySource.java --> javac --> MySource.class (JRE-compliant) --> Dalvik JVM --> running Android app (???)
Run Code Online (Sandbox Code Playgroud)
如果javac
用于将所有源代码编译为字节码,那为什么Dalvik无法运行某些类型的Java代码呢?
昨天我问了一个非常相似的问题,虽然它在技术上得到了解答(在重新阅读我的问题之后,我发现我根本不够具体)没有人能够解释Dalvik固有的是什么使得无法运行Java代码来自Google Guice或Apache Camel等项目.有人告诉我,为了让Camel在Dalvik上运行,我必须得到Camel的源代码然后它必须"使用Android SDK构建",但我无法明确这意味着什么或暗示.
以Camel为例,你有这个(简化):
RouteBuilder.java --> javac --> RouteBuilder.class --> …
Run Code Online (Sandbox Code Playgroud) 可能重复:
常春藤无法解决依赖性,无法找到原因
我正在尝试运行以下构建任务(initIvy
):
<?xml version="1.0" encoding="UTF-8"?>
<project name="myproject-build" default="package" basedir=".." xmlns:ivy="antlib:org.apache.ivy.ant">
<property file="build/build.properties"/>
<property environment="env"/>
<!-- Ant library path, including all of its plugins. -->
<path id="ant.lib.path">
<fileset dir="${env.ANT_HOME}/lib" includes="*.jar"/>
</path>
<!-- CONFIGURE IVY -->
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="antlib:org.apache.ivy.ant" classpathref="ant.lib.path"/>
<!-- Use Ivy tasks to resolve dependencies into the local Ivy cache. -->
<target name="initIvy">
<!-- Initialize Ivy and connect to host repository. -->
<echo message="Initializing Apache Ivy and connecting to the host repository."/>
<ivy:settings url="${ivy.std.repo.settings.url}" realm="${ivy.std.repo.realm}" username="${ivy.std.repo.username}" passwd="${ivy.std.repo.password}"/> …
Run Code Online (Sandbox Code Playgroud) 我的WAR使用通过WAR内部目录log4j.properties
下的文件配置的log4j FileAppender classes/
.
我已经配置了我的log4j appender:
# Set the root logger to DEBUG.
log4j.rootLogger=DEBUG
# MonitorLog - used to log messages in the Monitor.log file.
log4j.appender.MonitorAppender=org.apache.log4j.FileAppender
log4j.appender.MonitorAppender.File=MonitorLog.log
log4j.appender.MonitorAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.MonitorAppender.layout.ConversionPattern= %-4r [%t] %-5p %c %x - %m%n
# Use the MonitorAppender to log all messages.
log4j.logger.*=DEBUG,MonitorAppender
Run Code Online (Sandbox Code Playgroud)
使用此配置,我试图实现以下目的:
MonitorLog.log
文件位于Tomcat的logs/
目录下此配置是否实现了这些项目,如果没有,需要更改哪些内容?
我正在设计一个新的Java Web应用程序的后端,我正在尝试决定是否使用事件总线; 特别是番石榴EventBus
.
大多数服务器端请求都是同步的:即,用户正在请求数据并需要在几秒钟内响应.但是,也有相当多的请求可以是异步的,并且在客户端是"一劳永逸".只要它们最终被处理,如果需要2秒钟处理或2小时,客户可以更少关心.
对于这些异步请求,我计划让servlet监听映射的URL,将请求发布到队列.然后,消费者将每个请求出列并将其路由到适当的处理程序.这是EventBus
可能会或可能不会发挥作用的地方.将请求路由到正确的处理程序的业务逻辑非常复杂.通常情况下,骆驼路线将是完美的解决方案.在我的用例中,我想知道我是否可以将一堆"处理器"(事件处理程序)连接到同一个事件总线,然后让每个事件相互触发和接收事件,直到最终结果为止.产生的.
我想说我已经探索过使用Apache Camel,并且我相信Camel是这里工作的合适工具.可悲的是,由于这个问题范围之外的原因,我不打算使用它.所以我开始想起类似Camel的解决方案,这就是我到达Guava的方式EventBus
.但它可能不是一个合适的替代品.
我想我正在寻找Event Bus
模式解决的问题分类,然后我需要确定这是否符合我的用例.